]> git.ipfire.org Git - thirdparty/git.git/commit
line-range: fix infinite loop bug with '$' regex
authorLars Kellogg-Stedman <lars@oddbit.com>
Mon, 19 Dec 2022 22:48:50 +0000 (17:48 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 20 Dec 2022 01:00:43 +0000 (10:00 +0900)
commit4e57c88e028c25ee9428b51ff829299bbb88a80c
tree330e35d5650f027d75569c3636e52013ea3e878c
parent8706a59933d09354c5e3eb09a543453655a97183
line-range: fix infinite loop bug with '$' regex

When the -L argument to "git log" is passed the zero-width regular
expression "$" (as in "-L :$:line-range.c"), this results in an
infinite loop in find_funcname_matching_regexp().

Modify find_funcname_matching_regexp to correctly match the entire line
instead of the zero-width match at eol and update the loop condition to
prevent an infinite loop in the event of other undiscovered corner cases.

The primary change is that we pre-decrement the beginning-of-line marker
('bol') before comparing it to '\n'. In the case of '$', where we match the
'\n' at the end of the line and start the loop with bol == eol, this
ensures that bol will find the beginning of the line on which the match
occurred.

Originally reported in <https://stackoverflow.com/q/74690545/147356>.

Signed-off-by: Lars Kellogg-Stedman <lars@oddbit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
line-range.c
t/t4211-line-log.sh