Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

[PATCH] Use realparamtab and don't dereference special parameters in zle code



Use realparamtab and don't dereference special parameters in zle code

Philippe

diff --git a/Src/Zle/compctl.c b/Src/Zle/compctl.c
index ce39db211..c33578a12 100644
--- a/Src/Zle/compctl.c
+++ b/Src/Zle/compctl.c
@@ -3661,7 +3661,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
 	dumphashtable(cmdnamtab, -3);
 	/* And parameter names if autocd and cdablevars are set. */
 	if (isset(AUTOCD) && isset(CDABLEVARS))
-	    dumphashtable(paramtab, -4);
+	    dumphashtable(realparamtab, -4);
     }
     oaw = addwhat = (cc->mask & CC_QUOTEFLAG) ? -2 : CC_QUOTEFLAG;
 
@@ -3673,7 +3673,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
 	dumphashtable(optiontab, addwhat);
     if (cc->mask & CC_VARS) {
 	/* And parameter names. */
-	dumphashtable(paramtab, -9);
+	dumphashtable(realparamtab, -9);
 	addwhat = oaw;
     }
     if (cc->mask & CC_BINDINGS) {
@@ -3840,7 +3840,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
     if ((t = cc->mask & (CC_ARRAYS | CC_INTVARS | CC_ENVVARS | CC_SCALARS |
 			 CC_READONLYS | CC_SPECIALS | CC_PARAMS)))
 	/* Add various flavours of parameters. */
-	dumphashtable(paramtab, t);
+	dumphashtable(realparamtab, t);
     if ((t = cc->mask & CC_SHFUNCS))
 	/* Add shell functions. */
 	dumphashtable(shfunctab, t | (cc->mask & (CC_DISCMDS|CC_EXCMDS)));
diff --git a/Src/Zle/complete.c b/Src/Zle/complete.c
index 4bc048776..34387b776 100644
--- a/Src/Zle/complete.c
+++ b/Src/Zle/complete.c
@@ -1307,15 +1307,14 @@ addcompparams(struct compparam *cp, Param *pp)
 	Param pm = createparam(cp->name,
 			       cp->type |PM_SPECIAL|PM_REMOVABLE|PM_LOCAL);
 	if (!pm)
-	    pm = (Param) paramtab->getnode(paramtab, cp->name);
-	DPUTS(!pm, "param not set in addcompparams");
+	    pm = (Param) paramtab->getnode2(paramtab, cp->name);
+	DPUTS1(!pm, "param %s not set in addcompparams", cp->name);
 
 	*pp = pm;
 	pm->level = locallevel + 1;
 	if ((pm->u.data = cp->var)) {
 	    switch(PM_TYPE(cp->type)) {
 	    case PM_SCALAR:
-	    case PM_NAMEREF:
 		pm->gsu.s = &compvarscalar_gsu;
 		break;
 	    case PM_INTEGER:
@@ -1340,23 +1339,21 @@ void
 makecompparams(void)
 {
     Param cpm;
-    HashTable tht;
 
     addcompparams(comprparams, comprpms);
 
     if (!(cpm = createparam(
 	      COMPSTATENAME,
 	      PM_SPECIAL|PM_REMOVABLE|PM_SINGLE|PM_LOCAL|PM_HASHED)))
-	cpm = (Param) paramtab->getnode(paramtab, COMPSTATENAME);
-    DPUTS(!cpm, "param not set in makecompparams");
+	cpm = (Param) realparamtab->getnode2(realparamtab, COMPSTATENAME);
+    DPUTS1(!cpm, "param %s not set in makecompparams", COMPSTATENAME);
 
     comprpms[CPN_COMPSTATE] = cpm;
-    tht = paramtab;
     cpm->level = locallevel + 1;
     cpm->gsu.h = &compstate_gsu;
     cpm->u.hash = paramtab = newparamtable(31, COMPSTATENAME);
     addcompparams(compkparams, compkpms);
-    paramtab = tht;
+    paramtab = realparamtab;
 }
 
 /**/
diff --git a/Src/Zle/compresult.c b/Src/Zle/compresult.c
index f7d74ec7a..e8a6b6422 100644
--- a/Src/Zle/compresult.c
+++ b/Src/Zle/compresult.c
@@ -1082,7 +1082,7 @@ do_single(Cmatch m)
 			} else
 			    n = p + 1;
 
-			if ((pm = (Param) paramtab->getnode(paramtab, n)) &&
+			if ((pm = (Param) realparamtab->getnode(realparamtab, n)) &&
 			    PM_TYPE(pm->node.flags) != PM_SCALAR)
 			    tryit = 0;
 		    }
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c
index 37d587d02..c2b592490 100644
--- a/Src/Zle/zle_main.c
+++ b/Src/Zle/zle_main.c
@@ -1867,7 +1867,7 @@ bin_vared(char *name, char **args, Options ops, UNUSED(int func))
 	createparam(args[0], type);
     }
     queue_signals();
-    pm = (Param) paramtab->getnode(paramtab, args[0]);
+    pm = (Param) realparamtab->getnode(realparamtab, args[0]);
     if (pm && (PM_TYPE(pm->node.flags) & (PM_ARRAY|PM_HASHED))) {
 	char **a;
 
diff --git a/Src/Zle/zle_params.c b/Src/Zle/zle_params.c
index 6ac7d4f0a..b828e145c 100644
--- a/Src/Zle/zle_params.c
+++ b/Src/Zle/zle_params.c
@@ -200,14 +200,13 @@ makezleparams(int ro)
 	Param pm = createparam(zp->name, (zp->type |PM_SPECIAL|PM_REMOVABLE|
 					  PM_LOCAL|(ro ? PM_READONLY : 0)));
 	if (!pm)
-	    pm = (Param) paramtab->getnode(paramtab, zp->name);
-	DPUTS(!pm, "param not set in makezleparams");
+	    pm = (Param) realparamtab->getnode2(realparamtab, zp->name);
+	DPUTS1(!pm, "param %s not set in makezleparams", zp->name);
 
 	pm->level = locallevel + 1;
 	pm->u.data = zp->data;
 	switch(PM_TYPE(zp->type)) {
 	    case PM_SCALAR:
-	    case PM_NAMEREF:
 		pm->gsu.s = zp->gsu;
 		break;
 	    case PM_ARRAY:
diff --git a/Src/Zle/zle_thingy.c b/Src/Zle/zle_thingy.c
index 94e67f838..7b1ef79ad 100644
--- a/Src/Zle/zle_thingy.c
+++ b/Src/Zle/zle_thingy.c
@@ -683,7 +683,8 @@ bin_zle_flags(char *name, char **args, UNUSED(Options ops), UNUSED(char func))
 		    if (invicmdmode()) {
 			startvichange(-1);
 			if (zmod.flags & (MOD_MULT|MOD_TMULT)) {
-			    Param pm = (Param) paramtab->getnode(paramtab, "NUMERIC");
+			    Param pm = (Param)
+				realparamtab->getnode2(realparamtab, "NUMERIC");
 			    if (pm && pm->node.flags & PM_SPECIAL)
 				pm->node.flags &= ~PM_UNSET;
 			}
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c
index 3e46acdab..8f8776da3 100644
--- a/Src/Zle/zle_tricky.c
+++ b/Src/Zle/zle_tricky.c
@@ -437,8 +437,8 @@ checkparams(char *p)
     int t0, n, l = strlen(p), e = 0;
     struct hashnode *hn;
 
-    for (t0 = paramtab->hsize - 1, n = 0; n < 2 && t0 >= 0; t0--)
-	for (hn = paramtab->nodes[t0]; n < 2 && hn; hn = hn->next)
+    for (t0 = realparamtab->hsize - 1, n = 0; n < 2 && t0 >= 0; t0--)
+	for (hn = realparamtab->nodes[t0]; n < 2 && hn; hn = hn->next)
 	    if (pfxlen(p, hn->nam) == l) {
 		n++;
 		if ((int)strlen(hn->nam) == l)
@@ -1512,7 +1512,8 @@ get_comp_string(void)
 	    zlemetacs_qsub - wb) {
 	    s = NULL;
 	    inwhat = IN_MATH;
-	    if ((keypm = (Param) paramtab->getnode(paramtab, varname)) &&
+	    if ((keypm = (Param)
+		 realparamtab->getnode(realparamtab, varname)) &&
 		(keypm->node.flags & PM_HASHED))
 		insubscr = 2;
 	    else
@@ -1612,7 +1613,8 @@ get_comp_string(void)
 		zsfree(varname);
 		varname = ztrdup(nb);
 		*ne = sav;
-		if ((keypm = (Param) paramtab->getnode(paramtab, varname)) &&
+		if ((keypm = (Param)
+		     realparamtab->getnode(realparamtab, varname)) &&
 		    (keypm->node.flags & PM_HASHED))
 		    insubscr = 2;
 	    }
@@ -1693,7 +1695,8 @@ get_comp_string(void)
 	    if (wptr < sqbr) {
 		zsfree(varname);
 		varname = ztrduppfx(wptr, sqbr - wptr);
-		if ((keypm = (Param) paramtab->getnode(paramtab, varname)) &&
+		if ((keypm = (Param)
+		     realparamtab->getnode(realparamtab, varname)) &&
 		    (keypm->node.flags & PM_HASHED)) {
 		    if (insubscr != 3)
 			insubscr = 2;


Messages sorted by: Reverse Date, Date, Thread, Author