Johannes Schindelin <johannes.schinde...@gmx.de> writes:

> Reported via Coverity.
>
> Signed-off-by: Johannes Schindelin <johannes.schinde...@gmx.de>
> ---
>  http-backend.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/http-backend.c b/http-backend.c
> index eef0a361f4f..d12572fda10 100644
> --- a/http-backend.c
> +++ b/http-backend.c
> @@ -681,8 +681,10 @@ int cmd_main(int argc, const char **argv)
>               if (!regexec(&re, dir, 1, out, 0)) {
>                       size_t n;
>  
> -                     if (strcmp(method, c->method))
> +                     if (strcmp(method, c->method)) {
> +                             free(dir);
>                               return bad_request(&hdr, c);
> +                     }
>  
>                       cmd = c;
>                       n = out[0].rm_eo - out[0].rm_so;
> @@ -708,5 +710,7 @@ int cmd_main(int argc, const char **argv)
>                                          max_request_buffer);
>  
>       cmd->imp(&hdr, cmd_arg);
> +     free(dir);
> +     free(cmd_arg);
>       return 0;
>  }

Hmph.  I find a "leak" of a resource acquired inside the main
function and not released when the main function leaves a lot less
interesting than the other ones this series covers.

When the "return" in the first hunk leaves the function and also
the same block of the if () statement breaks out the loop, we also
fail to call regfree(&re).  Shouldn't we be cleaning it up as well?

Reply via email to