Re: [PATCH] remote.c: free previous results when looking for a ref match
Am 08.10.2016 um 01:58 schrieb Stefan Beller:
Show 15 quoted lines
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
> remote.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/remote.c b/remote.c
> index ad6c542..5f9afb4 100644
> --- a/remote.c
> +++ b/remote.c
> @@ -833,6 +833,8 @@ static int match_name_with_pattern(const char *key, const char *name,
> strbuf_add(&sb, value, vstar - value);
> strbuf_add(&sb, name + klen, namelen - klen - ksuffixlen);
> strbuf_addstr(&sb, vstar + 1);
> + if (*result)
> + free(*result);
free(3) can handle NULL pointers; this check is not necessary.
Is it wise to release memory for callers? I'd expect them to be responsible for that. Some of them can pass uninitialized pointers; this is not allowed anymore after the change.
Show 9 quoted lines
> *result = strbuf_detach(&sb, NULL);
> }
> return ret;
> @@ -1262,6 +1264,8 @@ static char *get_ref_match(const struct refspec *rs, int rs_nr, const struct ref
> */
> if (!send_mirror && !starts_with(ref->name, "refs/heads/"))
> return NULL;
> + if (name)
> + free(name);
Again, this check is not necessary. If I read the code correctly the pointer could be uninitialized at that point, though, causing free(3) to crash.
> name = xstrdup(ref->name);
> }
> if (ret_pat)
>