http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}()
Fix a memory leak that's been with us ever since
2f4038ab33
(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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
eef75d247a
commit
2139bd0200
@ -759,10 +759,14 @@ int cmd_main(int argc, const char **argv)
|
|||||||
struct service_cmd *c = &services[i];
|
struct service_cmd *c = &services[i];
|
||||||
regex_t re;
|
regex_t re;
|
||||||
regmatch_t out[1];
|
regmatch_t out[1];
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (regcomp(&re, c->pattern, REG_EXTENDED))
|
if (regcomp(&re, c->pattern, REG_EXTENDED))
|
||||||
die("Bogus regex in service table: %s", c->pattern);
|
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;
|
size_t n;
|
||||||
|
|
||||||
if (strcmp(method, c->method))
|
if (strcmp(method, c->method))
|
||||||
@ -774,7 +778,6 @@ int cmd_main(int argc, const char **argv)
|
|||||||
dir[out[0].rm_so] = 0;
|
dir[out[0].rm_so] = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
regfree(&re);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
|
Loading…
Reference in New Issue
Block a user