Merge branch 'js/regexec-buf' into maint
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:
@ -974,6 +974,19 @@ void git_qsort(void *base, size_t nmemb, size_t size,
|
||||
#define qsort git_qsort
|
||||
#endif
|
||||
|
||||
#ifndef REG_STARTEND
|
||||
#error "Git requires REG_STARTEND support. Compile with NO_REGEX=NeedsStartEnd"
|
||||
#endif
|
||||
|
||||
static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size,
|
||||
size_t nmatch, regmatch_t pmatch[], int eflags)
|
||||
{
|
||||
assert(nmatch > 0 && pmatch);
|
||||
pmatch[0].rm_so = 0;
|
||||
pmatch[0].rm_eo = size;
|
||||
return regexec(preg, buf, nmatch, pmatch, eflags | REG_STARTEND);
|
||||
}
|
||||
|
||||
#ifndef DIR_HAS_BSD_GROUP_SEMANTICS
|
||||
# define FORCE_DIR_SET_GID S_ISGID
|
||||
#else
|
||||
|
Reference in New Issue
Block a user