summaryrefslogtreecommitdiff
path: root/Src/glob.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@zsh.org>2017-03-23 09:35:20 +0000
committerPeter Stephenson <pws@zsh.org>2017-03-23 09:35:20 +0000
commit086656241c3ccca377474bfea1cb269ac9a67d60 (patch)
tree14df959ce75426ebd08c44f028b8950a2bffc2b9 /Src/glob.c
parent20d464944b8599e28044664a9adc8f349e3da5d4 (diff)
downloadzsh-086656241c3ccca377474bfea1cb269ac9a67d60.tar.gz
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/glob.c')
-rw-r--r--Src/glob.c8
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