From 222dea055c622822ff24a2fa14564231bf3323d0 Mon Sep 17 00:00:00 2001 From: "Barton E. Schaefer" Date: Sat, 23 Apr 2016 14:20:16 -0700 Subject: Mikael Berthe: 38307: PCRE segfault when parenthesized group matches nothing unposted: regression test for 38307 --- ChangeLog | 7 +++++++ Src/Modules/pcre.c | 2 +- Test/V07pcre.ztst | 7 +++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 4fa96e7fa..e8bfad8c8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2016-04-23 Barton E. Schaefer + + * 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 * 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 -- cgit 1.4.1