[RFC][PATCH] Add reallocarray function.
Florian Weimer
fweimer@redhat.com
Tue Sep 2 09:29:00 GMT 2014
On 09/01/2014 07:24 PM, Rich Felker wrote:
>> I'm not sure if this is still on the table, but experience shows
>> that the realloc interface is error-prone for another reason: The
>> straight way to write an a reallocation,
>>
>> ptr = realloc(ptr, new_size);
>>
>> leads to a memory leak on error. It would be less error-prone to
>> have reallocarray to update the pointer directly on success, e.g.:
>>
>> if (reallocarray(&ptr, new_count, sizeof(T)) < 0) {
>> // handle error
>> }
>
> No, allocation functions which take void** are an extremely bad idiom
> because they encourage UB.
That's why I wrote that reallocarray has to be a macro.
On the other hand, I'm not particularly worried about the aliasing
violation because according to one reading of the standard, realloc
returns a pointer to untyped (but partially initialized) memory, which
needs out-of-language support anyway.
> Also, reallocarray is already defined by OpenBSD and perhaps others
> with a particular signature.
We'd have to give the fixed version a separate name, to avoid another
strerror_r-like fiasco.
--
Florian Weimer / Red Hat Product Security
More information about the Libc-alpha
mailing list