builtin/grep: fix leak with --max-count=0
When executing with `--max-count=0` we'll return early from git-grep(1) without performing any cleanup, which causes memory leaks. Plug these. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
a6590ccdd4
commit
43fedde3df
@@ -906,6 +906,7 @@ int cmd_grep(int argc,
|
|||||||
int dummy;
|
int dummy;
|
||||||
int use_index = 1;
|
int use_index = 1;
|
||||||
int allow_revs;
|
int allow_revs;
|
||||||
|
int ret;
|
||||||
|
|
||||||
struct option options[] = {
|
struct option options[] = {
|
||||||
OPT_BOOL(0, "cached", &cached,
|
OPT_BOOL(0, "cached", &cached,
|
||||||
@@ -1172,8 +1173,10 @@ int cmd_grep(int argc,
|
|||||||
* Optimize out the case where the amount of matches is limited to zero.
|
* Optimize out the case where the amount of matches is limited to zero.
|
||||||
* We do this to keep results consistent with GNU grep(1).
|
* We do this to keep results consistent with GNU grep(1).
|
||||||
*/
|
*/
|
||||||
if (opt.max_count == 0)
|
if (opt.max_count == 0) {
|
||||||
return 1;
|
ret = 1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (show_in_pager) {
|
if (show_in_pager) {
|
||||||
if (num_threads > 1)
|
if (num_threads > 1)
|
||||||
@@ -1267,10 +1270,14 @@ int cmd_grep(int argc,
|
|||||||
hit |= wait_all();
|
hit |= wait_all();
|
||||||
if (hit && show_in_pager)
|
if (hit && show_in_pager)
|
||||||
run_pager(&opt, prefix);
|
run_pager(&opt, prefix);
|
||||||
|
|
||||||
|
ret = !hit;
|
||||||
|
|
||||||
|
out:
|
||||||
clear_pathspec(&pathspec);
|
clear_pathspec(&pathspec);
|
||||||
string_list_clear(&path_list, 0);
|
string_list_clear(&path_list, 0);
|
||||||
free_grep_patterns(&opt);
|
free_grep_patterns(&opt);
|
||||||
object_array_clear(&list);
|
object_array_clear(&list);
|
||||||
free_repos();
|
free_repos();
|
||||||
return !hit;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ test_description='git grep various.
|
|||||||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
||||||
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_invalid_grep_expression() {
|
test_invalid_grep_expression() {
|
||||||
|
|||||||
Reference in New Issue
Block a user