From 086656241c3ccca377474bfea1cb269ac9a67d60 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 23 Mar 2017 09:35:20 +0000 Subject: 22601: Fix for parameter substitution pattern matches. It was not possible to math against a zero-length string in some cases. --- Src/glob.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'Src/glob.c') 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 -- cgit 1.4.1