test-tool regex: call regfree(), fix memory leaks

Fix memory leaks in "test-tool regex" which have been there since
c91841594c (test-regex: Add a test to check for a bug in the regex
routines, 2012-09-01), as a result we can mark a test as passing with
SANITIZE=leak using "TEST_PASSES_SANITIZE_LEAK=true".

We could regfree() on the die() paths here, which would make some
invocations of valgrind(1) happy, but let's just target SANITIZE=leak
for now. Variables that are still reachable when we die() are not
reported as leaks.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2022-07-01 12:37:36 +02:00 committed by Junio C Hamano
parent 1c343e5aef
commit a20b0dc796
2 changed files with 7 additions and 3 deletions

View File

@ -34,6 +34,7 @@ static int test_regex_bug(void)
if (m[0].rm_so == 3) /* matches '\n' when it should not */ if (m[0].rm_so == 3) /* matches '\n' when it should not */
die("regex bug confirmed: re-build git with NO_REGEX=1"); die("regex bug confirmed: re-build git with NO_REGEX=1");
regfree(&r);
return 0; return 0;
} }
@ -94,18 +95,20 @@ int cmd__regex(int argc, const char **argv)
die("failed regcomp() for pattern '%s' (%s)", pat, errbuf); die("failed regcomp() for pattern '%s' (%s)", pat, errbuf);
} }
if (!str) if (!str)
return 0; goto cleanup;
ret = regexec(&r, str, 1, m, 0); ret = regexec(&r, str, 1, m, 0);
if (ret) { if (ret) {
if (silent || ret == REG_NOMATCH) if (silent || ret == REG_NOMATCH)
return ret; goto cleanup;
regerror(ret, &r, errbuf, sizeof(errbuf)); regerror(ret, &r, errbuf, sizeof(errbuf));
die("failed regexec() for subject '%s' (%s)", str, errbuf); die("failed regexec() for subject '%s' (%s)", str, errbuf);
} }
return 0; cleanup:
regfree(&r);
return ret;
usage: usage:
usage("\ttest-tool regex --bug\n" usage("\ttest-tool regex --bug\n"
"\ttest-tool regex [--silent] <pattern>\n" "\ttest-tool regex [--silent] <pattern>\n"

View File

@ -2,6 +2,7 @@
test_description='grep icase on non-English locales' test_description='grep icase on non-English locales'
TEST_PASSES_SANITIZE_LEAK=true
. ./lib-gettext.sh . ./lib-gettext.sh
doalarm () { doalarm () {