From 7d1480af54e95e5a2165e8bb69937a6b0a1dc50a Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 28 Jul 2011 09:20:02 +0000 Subject: 29626: arguments to anonymous functions shouldn't be parsed as command words --- ChangeLog | 5 ++++- Src/params.c | 1 + Src/parse.c | 2 ++ Test/C04funcdef.ztst | 17 +++++++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 4edc62b61..57b269b31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2011-07-28 Peter Stephenson + * 29626: Src/parse.c, Test/C04funcdef.ztst: arguments to + anonymous functions shouldn't be parsed as command words. + * 29602 and subsequent changes: Doc/Zsh/expn.yo: clarify meaning of filename extension in :r and :e modifiers (which were slightly inconsistent). @@ -15176,5 +15179,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.5410 $ +* $Revision: 1.5411 $ ***************************************************** diff --git a/Src/params.c b/Src/params.c index 8a56766f8..fd0872130 100644 --- a/Src/params.c +++ b/Src/params.c @@ -4193,6 +4193,7 @@ arrfixenv(char *s, char **t) int zputenv(char *str) { + DPUTS(!str, "Attempt to put null string into environment."); #ifdef USE_SET_UNSET_ENV /* * If we are using unsetenv() to remove values from the diff --git a/Src/parse.c b/Src/parse.c index 5b6f09949..5b8f0af48 100644 --- a/Src/parse.c +++ b/Src/parse.c @@ -1465,6 +1465,7 @@ par_funcdef(void) ecssub = oecssub; YYERRORV(oecused); } + incmdpos = 0; zshlex(); } else if (unset(SHORTLOOPS)) { lineno += oldlineno; @@ -1720,6 +1721,7 @@ par_simple(int *complex, int nr) ecssub = oecssub; YYERROR(oecused); } + incmdpos = 0; zshlex(); } else { int ll, sl, c = 0; diff --git a/Test/C04funcdef.ztst b/Test/C04funcdef.ztst index 0cc5e5a2f..742d2d0a7 100644 --- a/Test/C04funcdef.ztst +++ b/Test/C04funcdef.ztst @@ -1,3 +1,8 @@ +%prep + + mkdir funcdef.tmp + cd funcdef.tmp + %test fn1() { return 1; } @@ -228,6 +233,18 @@ > print Following bit >} + touch yes no + () { echo $1 } (y|z)* + (echo here) + () { echo $* } some (y|z)* + () { echo empty };(echo here) +0:Anonymous function arguments and command arguments +>yes +>here +>some yes +>empty +>here + %clean rm -f file.in file.out -- cgit 1.4.1