diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | Src/pattern.c | 11 |
2 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 8791e5dcf..e23f314ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2015-05-15 Peter Stephenson <p.stephenson@samsung.com> + + * 35131: Src/pattern.c: "[]" in a pattern is treated as an empty + character set (matching nothing) if there are no more active "]" + is in the pattern. + 2015-05-14 Oliver Kiddle <opk@zsh.org> * 35139: Completion/Zsh/Context/_brace_parameter: add (b) flag diff --git a/Src/pattern.c b/Src/pattern.c index 05dcb2943..4e5e8a110 100644 --- a/Src/pattern.c +++ b/Src/pattern.c @@ -1405,7 +1405,16 @@ patcomppiece(int *flagp, int paren) starter = patnode(P_ANYBUT); } else starter = patnode(P_ANYOF); - if (*patparse == Outbrack) { + /* + * []...] means match a "]" or other included characters. + * However, to be a bit helpful and for compatibility + * with other shells, don't take in that sense if + * there's no further "]". That's still imperfect, + * but it's all we can do --- we're required to + * treat [$var]*[$var]with empty var as [ ... ] + * containing "]*[". + */ + if (*patparse == Outbrack && strchr(patparse+1, Outbrack)) { patparse++; patadd(NULL, ']', 1, PA_NOALIGN); } |