[PATCH 12/20] http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}()
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Dec 28, 2022, 18:00 UTC
- Message-ID
- <patch-12.20-9be5b0c7836-20221228T175512Z-avarab@gmail.com>
- In-Reply-To
- <cover-00.20-00000000000-20221228T175512Z-avarab@gmail.com>
Fix a memory leak that's been with us ever since 2f4038ab337 (Git-aware CGI to provide dumb HTTP transport, 2009-10-30). In this case we're not calling regerror() after a failed regexec(), and don't otherwise use "re" afterwards.
We can therefore simplify this code by calling regfree() right after the regexec(). An alternative fix would be to add a regfree() to both the "return" and "break" path in this for-loop.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- http-backend.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/http-backend.c b/http-backend.c index 6eb3b2fe51c..9bb63c458b1 100644 --- a/http-backend.c +++ b/http-backend.c @@ -759,10 +759,14 @@ int cmd_main(int argc, const char **argv) struct service_cmd *c = &services[i]; regex_t re; regmatch_t out[1]; + int ret; if (regcomp(&re, c->pattern, REG_EXTENDED)) die("Bogus regex in service table: %s", c->pattern); - if (!regexec(&re, dir, 1, out, 0)) { + ret = regexec(&re, dir, 1, out, 0); + regfree(&re); + + if (!ret) { size_t n; if (strcmp(method, c->method)) @@ -774,7 +778,6 @@ int cmd_main(int argc, const char **argv) dir[out[0].rm_so] = 0; break; } - regfree(&re); } if (!cmd)
-- 2.39.0.1153.gb0033028ca9