Re: [PATCH 12/20] http-backend.c: fix cmd_main() memory leak, refactor reg{exec,free}()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Am 28.12.22 um 19:00 schrieb Ævar Arnfjörð Bjarmason:
> 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.

Yes, or to add one regfree() call early in the conditional...

>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
> ---
>  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;
>

... i.e. right here.  But only after copying the offsets out of "out"!

Anyway, the ret approach taken here is fine.

"dir" is still leaking, by the way.  Probably worth a separate patch.

>  			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)




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux