about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBarton E. Schaefer <schaefer@zsh.org>2016-04-23 14:20:16 -0700
committerBarton E. Schaefer <schaefer@zsh.org>2016-04-23 14:20:16 -0700
commit222dea055c622822ff24a2fa14564231bf3323d0 (patch)
treecbf00fab95aaa766805ea39be6742f7d4bbc8646
parente1c745a0dca56afb9cfcace1ef59449152290188 (diff)
downloadzsh-222dea055c622822ff24a2fa14564231bf3323d0.tar.gz
zsh-222dea055c622822ff24a2fa14564231bf3323d0.tar.xz
zsh-222dea055c622822ff24a2fa14564231bf3323d0.zip
Mikael Berthe: 38307: PCRE segfault when parenthesized group matches nothing
unposted: regression test for 38307
-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