summary refs log tree commit diff
path: root/diffcore-pickaxe.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-03-24 13:07:35 -0700
committerJunio C Hamano <gitster@pobox.com>2017-03-24 13:07:35 -0700
commit0efeb5ca12f070ca3a8cec48761af863e9a7f6fe (patch)
treefa2c09fec0d3ffadedf45fe037902028ee8905f9 /diffcore-pickaxe.c
parent6756b58ebc213a786adaccf3f0f07c56c8a2744a (diff)
parentf53c5de29cec68e3294a008052251631eaffcf07 (diff)
Merge branch 'js/regexec-buf'
Fix for potential segv introduced in v2.11.0 and later (also
v2.10.2).

* js/regexec-buf:
  pickaxe: fix segfault with '-S<...> --pickaxe-regex'
Diffstat (limited to 'diffcore-pickaxe.c')
-rw-r--r--diffcore-pickaxe.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
index 9795ca1c15..341529b5a8 100644
--- a/diffcore-pickaxe.c
+++ b/diffcore-pickaxe.c
@@ -81,12 +81,15 @@ static unsigned int contains(mmfile_t *mf, regex_t *regexp, kwset_t kws)
 		regmatch_t regmatch;
 		int flags = 0;
 
-		while (*data &&
+		while (sz && *data &&
 		       !regexec_buf(regexp, data, sz, 1, &regmatch, flags)) {
 			flags |= REG_NOTBOL;
 			data += regmatch.rm_eo;
-			if (*data && regmatch.rm_so == regmatch.rm_eo)
+			sz -= regmatch.rm_eo;
+			if (sz && *data && regmatch.rm_so == regmatch.rm_eo) {
 				data++;
+				sz--;
+			}
 			cnt++;
 		}