Re: [PATCHv2 1/4] notes: don't leak memory in git_config_get_notes_strategy
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Mar 30, 2016, 17:32 UTC
- Message-ID
- <CAPig+cTeVgyNHa5uHUMDZ6ifxyjk2wvm=jGd9tP1+BuBKKVR+g@mail.gmail.com>
- In-Reply-To
- <1459357518-14913-2-git-send-email-sbeller@google.com>
On Wed, Mar 30, 2016 at 1:05 PM, Stefan Beller <sbeller@google.com> wrote:
Show 25 quoted lines
> `value` is just a temporary scratchpad, so we need to make sure it doesn't
> leak. It is xstrdup'd in `git_config_get_string` and
> `parse_notes_merge_strategy` just compares the string against predefined
> values, so no need to keep it around longer. Make `value` non-const to
> avoid the cast in the free.
>
> Signed-off-by: Stefan Beller <sbeller@google.com>
> ---
> diff --git a/builtin/notes.c b/builtin/notes.c
> @@ -744,13 +744,14 @@ static int merge_commit(struct notes_merge_options *o)
> static int git_config_get_notes_strategy(const char *key,
> enum notes_merge_strategy *strategy)
> {
> - const char *value;
> + char *value;
>
> - if (git_config_get_string_const(key, &value))
> + if (git_config_get_string(key, &value))
> return 1;
> if (parse_notes_merge_strategy(value, strategy))
> git_die_config(key, "unknown notes merge strategy %s", value);
>
> + free(value);
> return 0;
> }Hmm, I thought Peff's suggestion of using git_config_get_value() was accepted as superior since it avoids the allocation altogether, thus no need for free() and no leak.