Re: [PATCH v2 23/25] name-rev: avoid leaking memory in the `deref` case
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 2, 2017, 03:42 UTC
- Message-ID
- <xmqq8tmfexg6.fsf@gitster.mtv.corp.google.com>
- In-Reply-To
- <xmqqd1bsdjmw.fsf@gitster.mtv.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 27 quoted lines
> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>
>> When the `name_rev()` function is asked to dereference the tip name, it
>> allocates memory. But when it turns out that another tip already
>> described the commit better than the current one, we forgot to release
>> the memory.
>
> Very well explained.
>>
>> diff --git a/builtin/name-rev.c b/builtin/name-rev.c
>> index 92a5d8a5d26..a4ce73fb1e9 100644
>> --- a/builtin/name-rev.c
>> +++ b/builtin/name-rev.c
>> @@ -28,6 +28,7 @@ static void name_rev(struct commit *commit,
>> struct rev_name *name = (struct rev_name *)commit->util;
>> struct commit_list *parents;
>> int parent_number = 1;
>> + char *p = NULL;
>>
>> parse_commit(commit);
>>
>> @@ -35,7 +36,7 @@ static void name_rev(struct commit *commit,
>> return;
>>
>> if (deref) {
>> - tip_name = xstrfmt("%s^0", tip_name);
>> + tip_name = p = xstrfmt("%s^0", tip_name);I'll rename 'p' to 'to_free' while queuing, though. Without a descriptive name, it was confusing to view while resolving conflicts with another in-flight topic.