about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2012-02-29 09:57:40 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2012-02-29 09:57:40 +0000
commit6f93994a5aeb3a8290153ec159af35bbd96a6673 (patch)
treea6a682ebf0479364be21d2d74a4ee28d4dad9b4c
parentd0d0490c67c34a4e73913e743b9e0602e33f6f9f (diff)
downloadzsh-6f93994a5aeb3a8290153ec159af35bbd96a6673.tar.gz
zsh-6f93994a5aeb3a8290153ec159af35bbd96a6673.tar.xz
zsh-6f93994a5aeb3a8290153ec159af35bbd96a6673.zip
30299: "$*" was split with SHWORDSPLIT if IFS was empty or unset
-rw-r--r--ChangeLog9
-rw-r--r--Src/subst.c2
-rw-r--r--Test/D04parameter.ztst10
3 files changed, 18 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 6673aeba0..b1d8ce9d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-02-29  Peter Stephenson  <pws@csr.com>
+
+	* 30299: Src/subst.c, Test/D04parameter.ztst: "$*" was split
+	in SHWORDSPLIT if IFS was unset or empty.
+
 2012-02-26  Peter Stephenson  <p.w.stephenson@ntlworld.com>
 
 	* Alexey I. Froloff: 30270: Test/C02Cond.ztst: we don't care
@@ -19,7 +24,7 @@
 
 2012-02-20  Barton E. Schaefer  <schaefer@zsh.org>
 
-	* 30242: Src/subst.c, Test/D05parameter.ztst: use PREFORK_SINGLE
+	* 30242: Src/subst.c, Test/D04parameter.ztst: use PREFORK_SINGLE
 	for the right-hand side of ${...=...} when SH_WORD_SPLIT is in
 	effect (POSIX emulation).
 
@@ -16020,5 +16025,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5596 $
+* $Revision: 1.5597 $
 *****************************************************
diff --git a/Src/subst.c b/Src/subst.c
index b9229861b..04ef1a4fb 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -1649,7 +1649,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags)
      * This is one of the things that decides whether multsub
      * will produce an array, but in an extremely indirect fashion.
      */
-    int nojoin = (pf_flags & PREFORK_SHWORDSPLIT) ? !(ifs && *ifs) : 0;
+    int nojoin = (pf_flags & PREFORK_SHWORDSPLIT) ? !(ifs && *ifs) && !qt : 0;
     /*
      * != 0 means ${...}, otherwise $...  What works without braces
      * is largely a historical artefact (everything works with braces,
diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst
index 7eb721226..8bc37ff4c 100644
--- a/Test/D04parameter.ztst
+++ b/Test/D04parameter.ztst
@@ -1475,3 +1475,13 @@
    print ${#foo}
 0:Nularg removed from split empty string
 >0
+
+   (set -- a b c
+    setopt shwordsplit
+    IFS=
+    print -rl "$*"
+    unset IFS
+    print -rl "$*")
+0:Regression test for shwordsplit with null or unset IFS and quoted array
+>abc
+>a b c