about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Src/params.c1
-rw-r--r--Src/parse.c2
-rw-r--r--Test/C04funcdef.ztst17
4 files changed, 24 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 4edc62b61..57b269b31 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2011-07-28  Peter Stephenson  <pws@csr.com>
 
+	* 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