diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index 16e6aec6..49a67097 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -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 diff --git a/doc/aosa-bash.pdf b/doc/aosa-bash.pdf index 006a7677..4c8773a9 100644 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 index 00000000..006a7677 Binary files /dev/null and b/doc/aosa-bash.pdf.old differ diff --git a/subst.c b/subst.c index 41a9dd01..35791db9 100644 --- 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);