Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH] Use realparamtab and don't dereference special parameters in zle code
- X-seq: zsh-workers 54809
- From: Philippe Altherr <philippe.altherr@xxxxxxxxx>
- To: Zsh hackers list <zsh-workers@xxxxxxx>
- Subject: [PATCH] Use realparamtab and don't dereference special parameters in zle code
- Date: Fri, 19 Jun 2026 01:55:57 +0200
- Arc-authentication-results: i=1; mx.google.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=jDA5WA/fbOM9/CoYanlpjgDnHH+MVhnDyBbHOCU9/NE=; fh=BgAYDYpL6Ne/A5nWEMVJiHiBtrz8Imz3uf26RDwgQX4=; b=NEmZW2Sy+yKcQ5eXZPLBLraHSCDU9NtcDgeJNwTWUqv3j9YMBG+tCMsjZXTJA59/2G S2E6cdRBcb3Jzd88J6mp9blFGkXSlc5fyzLKR4W7AWkQAgkV+2CesJNtleCd+LuybJTe 3bwtfC2wjhBE0Q+cIru+JQUgDtcYuGoYNXpjkFmhhUjJc6nsecQlVw3o6+qm33EpglEd rwc5qtxnD9yETUI5wF+cpieF5ezu/O0jSzrYAgoql9Mn6+KiGEACeMunOVbOCfMSIWuJ i/x7sqscsaovCx10pB4g0p9169S/8fZ4ajF34XiUNN9y4lWYLLxze5p8D8eSfj9fMXp0 AiAw==; darn=zsh.org
- Arc-seal: i=1; a=rsa-sha256; t=1781826968; cv=none; d=google.com; s=arc-20240605; b=ddb0IMhOt5zK3I0rI3CdoJwAO7M/IUYE+xNYyeTaDaK0CB8KcZiv8RhetxfK9n6qbq cUjXV9QEegqCTtRWemToMkM383g3HgzldPZlrLF7tpntvLJDajxKl71r2Tb43Wro2IVd +HknLz5/fmdxAVnQVX5lcp24qBujWEm1IIUq73Vg/R7w8TEWYkHfR4QOKqpOZn+nu9+q /dghzecho/NnhiOI/7gq6wfanJXU7brIUwRjS80aelbU41iJDAyMplgnsjKbVNCjTkgA 0yJpAbomeQlcaxsdAhutPEq4jhAlYPaWf6S2DyPBi9d4d35T3nC8ErUUom8w2WPvpZRN xTmg==
- Archived-at: <https://zsh.org/workers/54809>
- List-id: <zsh-workers.zsh.org>
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