From 2f5bc6482fdddac91a7f06602d65584ebeb41a6c Mon Sep 17 00:00:00 2001
From: "Barton E. Schaefer" <schaefer@zsh.org>
Date: Wed, 15 Jul 2015 17:51:41 -0700
Subject: [PATCH] 35799: with NO_EXEC, parse parameter subscript expressions
Upstream-commit: a0862f6381979b165e864e9c5b97d12432d35d48
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
---
Src/params.c | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/Src/params.c b/Src/params.c
index f7551b2..be8394b 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -1070,14 +1070,12 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w,
Patprog pprog = NULL;
/*
- * If in NO_EXEC mode, the parameters won't be set up
- * properly, so there's no point even doing any sanity checking.
- * Just return 0 now.
+ * If in NO_EXEC mode, the parameters won't be set up properly,
+ * so just pretend everything is a hash for subscript parsing
*/
- if (unset(EXECOPT))
- return 0;
- ishash = (v->pm && PM_TYPE(v->pm->node.flags) == PM_HASHED);
+ ishash = (unset(EXECOPT) ||
+ (v->pm && PM_TYPE(v->pm->node.flags) == PM_HASHED));
if (prevcharlen)
*prevcharlen = 1;
if (nextcharlen)
@@ -1232,8 +1230,18 @@ getarg(char **str, int *inv, Value v, int a2, zlong *w,
}
if (!c)
return 0;
- s = dupstrpfx(s, t - s);
*str = tt = t;
+
+ /*
+ * If in NO_EXEC mode, the parameters won't be set up properly,
+ * so there's no additional sanity checking we can do.
+ * Just return 0 now.
+ */
+ if (unset(EXECOPT))
+ return 0;
+
+ s = dupstrpfx(s, t - s);
+
/* If we're NOT reverse subscripting, strip the inull()s so brackets *
* are not backslashed after parsestr(). Otherwise leave them alone *
* so that the brackets will be escaped when we patcompile() or when *
--
2.7.4