diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | Src/Modules/pcre.c | 2 | ||||
-rw-r--r-- | Test/V07pcre.ztst | 7 |
3 files changed, 15 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 4fa96e7fa..e8bfad8c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2016-04-23 Barton E. Schaefer <schaefer@zsh.org> + + * Mikael Berthe: 38307: Src/Modules/pcre.c: PCRE segfault when + parenthesized group matches nothing (cf. 37515) + + * unposted: Test/V07pcre.ztst: regression test for 38307 + 2016-04-22 Barton E. Schaefer <schaefer@zsh.org> * 38306: Src/builtin.c: in printf formats, treat a missing diff --git a/Src/Modules/pcre.c b/Src/Modules/pcre.c index e23ab57f5..5fd67963d 100644 --- a/Src/Modules/pcre.c +++ b/Src/Modules/pcre.c @@ -228,7 +228,7 @@ zpcre_get_substrings(char *arg, int *ovec, int ret, char *matchvar, /* Find the start offset */ MB_CHARINIT(); leftlen = ipair[0]; - while (leftlen) { + while (leftlen > 0) { offs++; clen = MB_CHARLEN(ptr, leftlen); ptr += clen; diff --git a/Test/V07pcre.ztst b/Test/V07pcre.ztst index 39077564c..ad1770712 100644 --- a/Test/V07pcre.ztst +++ b/Test/V07pcre.ztst @@ -130,3 +130,10 @@ 0:pcre_match -b and pcre_match -n >78884; ZPCRE_OP: 25 30 >90210; ZPCRE_OP: 31 36 + +# Subshell because crash on failure + ( setopt re_match_pcre + [[ test.txt =~ '^(.*_)?(test)' ]] + echo $match[2] ) +0:regression for segmentation fault, workers/38307 +>test |