Merge branch 'lk/line-range-parsing-fix' into maint-2.39
When given a pattern that matches an empty string at the end of a line, the code to parse the "git diff" line-ranges fell into an infinite loop, which has been corrected. * lk/line-range-parsing-fix: line-range: fix infinite loop bug with '$' regex
This commit is contained in:
commit
725f293355
@ -135,7 +135,7 @@ static const char *find_funcname_matching_regexp(xdemitconf_t *xecfg, const char
|
|||||||
{
|
{
|
||||||
int reg_error;
|
int reg_error;
|
||||||
regmatch_t match[1];
|
regmatch_t match[1];
|
||||||
while (1) {
|
while (*start) {
|
||||||
const char *bol, *eol;
|
const char *bol, *eol;
|
||||||
reg_error = regexec(regexp, start, 1, match, 0);
|
reg_error = regexec(regexp, start, 1, match, 0);
|
||||||
if (reg_error == REG_NOMATCH)
|
if (reg_error == REG_NOMATCH)
|
||||||
@ -148,8 +148,8 @@ static const char *find_funcname_matching_regexp(xdemitconf_t *xecfg, const char
|
|||||||
/* determine extent of line matched */
|
/* determine extent of line matched */
|
||||||
bol = start+match[0].rm_so;
|
bol = start+match[0].rm_so;
|
||||||
eol = start+match[0].rm_eo;
|
eol = start+match[0].rm_eo;
|
||||||
while (bol > start && *bol != '\n')
|
while (bol > start && *--bol != '\n')
|
||||||
bol--;
|
; /* nothing */
|
||||||
if (*bol == '\n')
|
if (*bol == '\n')
|
||||||
bol++;
|
bol++;
|
||||||
while (*eol && *eol != '\n')
|
while (*eol && *eol != '\n')
|
||||||
@ -161,6 +161,7 @@ static const char *find_funcname_matching_regexp(xdemitconf_t *xecfg, const char
|
|||||||
return bol;
|
return bol;
|
||||||
start = eol;
|
start = eol;
|
||||||
}
|
}
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *parse_range_funcname(
|
static const char *parse_range_funcname(
|
||||||
|
@ -315,4 +315,26 @@ test_expect_success 'line-log with --before' '
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'setup tests for zero-width regular expressions' '
|
||||||
|
cat >expect <<-EOF
|
||||||
|
Modify func1() in file.c
|
||||||
|
Add func1() and func2() in file.c
|
||||||
|
EOF
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'zero-width regex $ matches any function name' '
|
||||||
|
git log --format="%s" --no-patch "-L:$:file.c" >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'zero-width regex ^ matches any function name' '
|
||||||
|
git log --format="%s" --no-patch "-L:^:file.c" >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'zero-width regex .* matches any function name' '
|
||||||
|
git log --format="%s" --no-patch "-L:.*:file.c" >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user