Merge branch 'js/regexec-buf'
Some codepaths in "git diff" used regexec(3) on a buffer that was mmap(2)ed, which may not have a terminating NUL, leading to a read beyond the end of the mapped region. This was fixed by introducing a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND extension. * js/regexec-buf: regex: use regexec_buf() regex: add regexec_buf() that can work on a non NUL-terminated string regex: -G<pattern> feeds a non NUL-terminated string to regexec() and fails
This commit is contained in:
14
grep.c
14
grep.c
@ -898,17 +898,6 @@ static int fixmatch(struct grep_pat *p, char *line, char *eol,
|
||||
}
|
||||
}
|
||||
|
||||
static int regmatch(const regex_t *preg, char *line, char *eol,
|
||||
regmatch_t *match, int eflags)
|
||||
{
|
||||
#ifdef REG_STARTEND
|
||||
match->rm_so = 0;
|
||||
match->rm_eo = eol - line;
|
||||
eflags |= REG_STARTEND;
|
||||
#endif
|
||||
return regexec(preg, line, 1, match, eflags);
|
||||
}
|
||||
|
||||
static int patmatch(struct grep_pat *p, char *line, char *eol,
|
||||
regmatch_t *match, int eflags)
|
||||
{
|
||||
@ -919,7 +908,8 @@ static int patmatch(struct grep_pat *p, char *line, char *eol,
|
||||
else if (p->pcre_regexp)
|
||||
hit = !pcrematch(p, line, eol, match, eflags);
|
||||
else
|
||||
hit = !regmatch(&p->regexp, line, eol, match, eflags);
|
||||
hit = !regexec_buf(&p->regexp, line, eol - line, 1, match,
|
||||
eflags);
|
||||
|
||||
return hit;
|
||||
}
|
||||
|
Reference in New Issue
Block a user