diff options
author | Junio C Hamano <gitster@pobox.com> | 2017-03-24 23:07:35 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-03-24 23:07:35 +0300 |
commit | 0efeb5ca12f070ca3a8cec48761af863e9a7f6fe (patch) | |
tree | fa2c09fec0d3ffadedf45fe037902028ee8905f9 /diffcore-pickaxe.c | |
parent | 6756b58ebc213a786adaccf3f0f07c56c8a2744a (diff) | |
parent | f53c5de29cec68e3294a008052251631eaffcf07 (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.c | 7 |
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, ®match, 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++; } |