git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] xrealloc: do not reuse pointer freed by zero-length realloc()

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 1, 2020, 15:56 UTC
Message-ID
<xmqq7dtdebik.fsf@gitster.c.googlers.com>
In-Reply-To
<20200901111800.GA3115584@coredump.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 23 quoted lines
> The simplest fix here is to just pass "ret" (which we know to be NULL)
> to the follow-up realloc(). That does mean that a system which _doesn't_
> free the original pointer would leak it. But that interpretation of the
> standard seems unlikely (if a system didn't deallocate in this case, I'd
> expect it to simply return the original pointer). If it turns out to be
> an issue, we can handle the "!size" case up front instead, before we
> call realloc() at all.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
>  wrapper.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/wrapper.c b/wrapper.c
> index 4ff4a9c3db..b0d375beee 100644
> --- a/wrapper.c
> +++ b/wrapper.c
> @@ -120,7 +120,7 @@ void *xrealloc(void *ptr, size_t size)
>  	memory_limit_check(size, 0);
>  	ret = realloc(ptr, size);
>  	if (!ret && !size)
> -		ret = realloc(ptr, 1);
> +		ret = realloc(ret, 1);
The original does look bogus.

It however may be easier to reason about if we used malloc(1) in the fallback path for "we got NULL after asking for 0-byte" instead. I would have a hard time guessing the reason why we are reallocating NULL without going back to this commit, reading the log and seeing the original to see that the reason why we didn't use malloc() but realloc() is we aimed for a minimum change, if I encounter this code after I forgot this discussion.

Thanks.
Previous: Andreas Schwab
Message 10 of 10 in “xrealloc: do not reuse pointer freed by zero-length realloc()”
  1. xrealloc: do not reuse pointer freed by zero-length realloc()Jeff King, Sep 1, 2020
  2. Derrick StoleeSep 1, 2020
  3. Jeff KingSep 1, 2020
  4. Derrick StoleeSep 1, 2020
  5. Junio C HamanoSep 1, 2020
  6. Jeff KingSep 2, 2020
  7. Junio C HamanoSep 2, 2020
  8. Jonathan NiederSep 3, 2020
  9. Andreas SchwabSep 1, 2020
  10. Junio C HamanoSep 1, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.