summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--Src/Modules/pcre.c2
-rw-r--r--Test/V07pcre.ztst7
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