Re: [PATCH] xrealloc: do not reuse pointer freed by zero-length realloc()
- From
Derrick Stolee <stolee@gmail.com>
- Date
- Sep 1, 2020, 14:24 UTC
- Message-ID
- <a176961b-645f-4dcb-3439-596f814891f4@gmail.com>
- In-Reply-To
- <20200901135105.GA3284077@coredump.intra.peff.net>
On 9/1/2020 9:51 AM, Jeff King wrote:
Show 20 quoted lines
> On Tue, Sep 01, 2020 at 09:04:36AM -0400, Derrick Stolee wrote:
>> Adding an `if (!size) {free(ptr); return NULL;}` block was what I
>> expected. Was that chosen just so we can rely more on the system
>> realloc(), or is there a performance implication that I'm not
>> seeing?
>
> I went back and forth on whether to do that or not. This case should
> basically never happen, so I like both the performance and readability
> of only triggering it when realloc() returns NULL. But it would get rid
> of the hand-waving above, and I doubt the performance is measurable.
>
> If we do handle it up-front, then I think we'd actually want:
>
> if (!size) {
> free(ptr);
> return xmalloc(0);
> }
>
> (i.e., to never return NULL for consistency with xmalloc() and
> xcalloc()).Good point. In that sense, your change makes a lot more sense for staying consistent without strangeness like xmalloc(0).
Show 11 quoted lines
>>> @@ -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); >> >> I appreciate all the additional context for such a small change. > > Somebody's got to complete with you for ratio of commit message to diff > lines. :)
Pretty sure I have a long way to match, but it is important to have goals.
-Stolee