From ebad5f8164335ccc6547b1508561726aa6420258 Mon Sep 17 00:00:00 2001 From: Bart Schaefer Date: Tue, 5 Apr 2022 09:10:45 -0700 Subject: 49994: Single-byte equivalence of users/22601 and workers/40891 --- ChangeLog | 5 +++++ Src/glob.c | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index b412b883d..d72395705 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2022-04-05 Bart Schaefer + + * 49994: Src/glob.c: Single-byte equivalence of users/22601 and + workers/40891 for matching against zero-length strings + 2022-04-05 Peter Stephenson * 49989: Src/Zle/compresult.c, Src/utils.c, Src/zsh.h: Align diff --git a/Src/glob.c b/Src/glob.c index ca28f20e8..400be12d5 100644 --- a/Src/glob.c +++ b/Src/glob.c @@ -3331,7 +3331,7 @@ igetmatch(char **sp, Patprog p, int fl, int n, char *replstr, /* Largest possible match at tail of string: * * move forward along string until we get a match. * * Again there's no optimisation. */ - for (ioff = 0, t = s, umlen = uml; t < send; + for (ioff = 0, t = s, umlen = uml; t <= send; ioff++, t++, umlen--) { set_pat_start(p, t-s); if (pattrylen(p, t, send - t, umlen, &patstralloc, ioff)) { @@ -3362,7 +3362,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; t++, ioff++, umlen--) { + for (; t <= send; t++, ioff++, umlen--) { /* Find the longest match from this position. */ set_pat_start(p, t-s); if (pattrylen(p, t, send - t, umlen, &patstralloc, ioff)) { -- cgit 1.4.1