diff options
author | Peter Stephenson <pws@zsh.org> | 2017-03-23 09:35:20 +0000 |
---|---|---|
committer | Peter Stephenson <pws@zsh.org> | 2017-03-23 09:35:20 +0000 |
commit | 086656241c3ccca377474bfea1cb269ac9a67d60 (patch) | |
tree | 14df959ce75426ebd08c44f028b8950a2bffc2b9 /Src | |
parent | 20d464944b8599e28044664a9adc8f349e3da5d4 (diff) | |
download | zsh-086656241c3ccca377474bfea1cb269ac9a67d60.tar.gz zsh-086656241c3ccca377474bfea1cb269ac9a67d60.tar.xz zsh-086656241c3ccca377474bfea1cb269ac9a67d60.zip |
22601: Fix for parameter substitution pattern matches.
It was not possible to math against a zero-length string in some cases.
Diffstat (limited to 'Src')
-rw-r--r-- | Src/glob.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Src/glob.c b/Src/glob.c index 0fcb4e122..9ac0ae66c 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -2969,7 +2969,7 @@ igetmatch(char **sp, Patprog p, int fl, int n, char *replstr, do { /* loop over all matches for global substitution */ matched = 0; - for (; t < send; ioff++) { + for (; t <= send; ioff++) { /* Find the longest match from this position. */ set_pat_start(p, t-s); if (pattrylen(p, t, umlen, 0, &patstralloc, ioff)) { @@ -3018,15 +3018,19 @@ igetmatch(char **sp, Patprog p, int fl, int n, char *replstr, * which is already marked for replacement. */ matched = 1; + if (t == send) + break; while (t < mpos) { ioff++; umlen -= iincchar(&t, send - t); } break; } + if (t == send) + break; umlen -= iincchar(&t, send - t); } - } while (matched); + } while (matched && t < send); /* * check if we can match a blank string, if so do it * at the start. Goodness knows if this is a good idea |