]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
commit bash-20140725 snapshot
authorChet Ramey <chet.ramey@case.edu>
Mon, 28 Jul 2014 15:08:27 +0000 (11:08 -0400)
committerChet Ramey <chet.ramey@case.edu>
Mon, 28 Jul 2014 15:08:27 +0000 (11:08 -0400)
CWRU/CWRU.chlog
doc/aosa-bash.pdf
doc/aosa-bash.pdf.old [new file with mode: 0644]
subst.c

index 16e6aec65368761ce7569000af1a8d792344d83a..49a670972d5fa7eec93c0338547ca1679b4e8e46 100644 (file)
@@ -6496,3 +6496,12 @@ tests/array.right
          and
                declare -a foo
          are not equivalent
+
+                                  7/22
+                                  ----
+subst.c
+       - parameter_brace_expand: after calling parameter_brace_expand_indir,
+         turn off the W_ARRAYIND flag in the word it returns, because there
+         is no way for it to return the index that should be used, and the
+         rest of the function assumes that IND is valid if W_ARRAYIND is set.
+         Fixes bug reported by Corentin Peuvrel <cpeuvrel@pom-monitoring.com>
index 006a767769451694f5f25a9dfdb18282067d982b..4c8773a900aa5aa88f2f7bee86c1c5233d1f5d23 100644 (file)
Binary files a/doc/aosa-bash.pdf and b/doc/aosa-bash.pdf differ
diff --git a/doc/aosa-bash.pdf.old b/doc/aosa-bash.pdf.old
new file mode 100644 (file)
index 0000000..006a767
Binary files /dev/null and b/doc/aosa-bash.pdf.old differ
diff --git a/subst.c b/subst.c
index 41a9dd01626b98210a308e32e75e08e543baec79..35791db930dae611db2099676089da6a22c86dc6 100644 (file)
--- a/subst.c
+++ b/subst.c
@@ -339,6 +339,11 @@ dump_word_flags (flags)
 
   f = flags;
   fprintf (stderr, "%d -> ", f);
+  if (f & W_ARRAYIND)
+    {
+      f &= ~W_ARRAYIND;
+      fprintf (stderr, "W_ARRAYIND%s", f ? "|" : "");
+    }
   if (f & W_ASSIGNASSOC)
     {
       f &= ~W_ASSIGNASSOC;
@@ -7439,7 +7444,13 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
     }
 
   if (want_indir)
-    tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+    {
+      tdesc = parameter_brace_expand_indir (name + 1, var_is_special, quoted, quoted_dollar_atp, contains_dollar_at);
+      /* Turn off the W_ARRAYIND flag because there is no way for this function
+        to return the index we're supposed to be using. */
+      if (tdesc && tdesc->flags)
+       tdesc->flags &= ~W_ARRAYIND;
+    }
   else
     tdesc = parameter_brace_expand_word (name, var_is_special, quoted, PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS)), &ind);