# [PATCH] fetch: do not leak a refspec

2 messages from 2011-06-08 to 2011-06-09. Participants: Jim Meyering, Junio C Hamano.
Thread: https://gitlist.dev/t/27585

## Jim Meyering, 2011-06-08 20:06

Subject: [PATCH] fetch: do not leak a refspec
Message-ID: <87vcwgxf3q.fsf@rho.meyering.net>
URL: https://gitlist.dev/e/87vcwgxf3q.fsf%40rho.meyering.net

```


Signed-off-by: Jim Meyering <meyering@redhat.com>
---
Coverity spotted this.

 builtin/fetch.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/builtin/fetch.c b/builtin/fetch.c
index f9c41da..93c9938 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -875,6 +875,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
 {
 	int i;
 	static const char **refs = NULL;
+	struct refspec *refspec;
 	int ref_nr = 0;
 	int exit_code;

@@ -915,8 +916,9 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)

 	sigchain_push_common(unlock_pack_on_signal);
 	atexit(unlock_pack);
-	exit_code = do_fetch(transport,
-			parse_fetch_refspec(ref_nr, refs), ref_nr);
+	refspec = parse_fetch_refspec(ref_nr, refs);
+	exit_code = do_fetch(transport, refspec, ref_nr);
+	free(refspec);
 	transport_disconnect(transport);
 	transport = NULL;
 	return exit_code;
--
1.7.6.rc0.293.g40857

```

## Junio C Hamano, 2011-06-09 00:20

Subject: Re: [PATCH] fetch: do not leak a refspec
Message-ID: <7vaadr26u9.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vaadr26u9.fsf%40alter.siamese.dyndns.org
In-Reply-To: <87vcwgxf3q.fsf@rho.meyering.net>

```
Jim Meyering <jim@meyering.net> writes:

> Signed-off-by: Jim Meyering <meyering@redhat.com>
> ---
> Coverity spotted this.

Thanks, will apply, but it seems that Coverity does not know or care that
this codepath is used only once in the process and the process immediately
exits after the small leak that we didn't bother spending two extra lines
to plug, which is kind of sad.

>  builtin/fetch.c |    6 ++++--
>  1 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/fetch.c b/builtin/fetch.c
> index f9c41da..93c9938 100644
> --- a/builtin/fetch.c
> +++ b/builtin/fetch.c
> @@ -875,6 +875,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
>  {
>  	int i;
>  	static const char **refs = NULL;
> +	struct refspec *refspec;
>  	int ref_nr = 0;
>  	int exit_code;
>
> @@ -915,8 +916,9 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
>
>  	sigchain_push_common(unlock_pack_on_signal);
>  	atexit(unlock_pack);
> -	exit_code = do_fetch(transport,
> -			parse_fetch_refspec(ref_nr, refs), ref_nr);
> +	refspec = parse_fetch_refspec(ref_nr, refs);
> +	exit_code = do_fetch(transport, refspec, ref_nr);
> +	free(refspec);
>  	transport_disconnect(transport);
>  	transport = NULL;
>  	return exit_code;
> --
> 1.7.6.rc0.293.g40857

```
