summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Stephenson <p.w.stephenson@ntlworld.com>2017-09-10 18:02:52 +0100
committerPeter Stephenson <p.w.stephenson@ntlworld.com>2017-09-10 18:02:52 +0100
commitc9df6bc8d46415e270273777c80025948762e897 (patch)
treeeeca2dfc78f8b8f7b36a44fd347fd2df80d309f3
parente44600d9aac905aea08050c7387d6effd52c8539 (diff)
downloadzsh-c9df6bc8d46415e270273777c80025948762e897.tar.gz
zsh-c9df6bc8d46415e270273777c80025948762e897.zip
41662: exec -a arguments weren't sanitised
-rw-r--r--ChangeLog8
-rw-r--r--Src/exec.c3
-rw-r--r--Test/A01grammar.ztst6
3 files changed, 17 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 39f334370..85fa84de5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-09-10 Peter Stephenson <p.w.stephenson@ntlworld.com>
+
+ * 41622: Src/exec., Test/A01grammar.ztst: exec -a arguments
+ weren't sanitised.
+
+ * 41661: Src/subst.c, Test/D04parameter.ztst: need to remove
+ tokens before passing to bufferwords() for (z).
+
2017-09-09 Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
* 41628 (plus 41645 by Oliver): Completion/Unix/Command/_ps:
diff --git a/Src/exec.c b/Src/exec.c
index 76a6bb1a4..e2432fda4 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -3007,6 +3007,9 @@ execcmd_exec(Estate state, Execcmd_params eparams,
}
if (exec_argv0) {
char *str, *s;
+ exec_argv0 = dupstring(exec_argv0);
+ remnulargs(exec_argv0);
+ untokenize(exec_argv0);
size_t sz = strlen(exec_argv0);
str = s = zalloc(5 + 1 + sz + 1);
strcpy(s, "ARGV0=");
diff --git a/Test/A01grammar.ztst b/Test/A01grammar.ztst
index 0302c9624..5e7d6acd8 100644
--- a/Test/A01grammar.ztst
+++ b/Test/A01grammar.ztst
@@ -103,6 +103,12 @@
0:`exec' with -a option, no space
>/bin/SPLOOSH
+ (exec -a foo* $ZTST_testdir/../Src/zsh -fc 'print -r -- ${(V)0}')
+ (exec -a "" $ZTST_testdir/../Src/zsh -fc 'print -r -- ${(V)0}')
+0:rationalisation of arguments to exec -a
+>foo*
+>
+
(
opts=(-a /bin/WHOOOSH)
exec $opts /bin/sh -c 'echo $0'