Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87lfjcac7a.fsf@vuxu.org>
Date: Tue, 21 Jul 2020 21:40:41 +0200
From: Leah Neukirchen <leah@...u.org>
To: Rich Felker <dalias@...c.org>
Cc: Ariadne Conill <ariadne@...eferenced.org>,  musl@...ts.openwall.com
Subject: Re: perhaps we should add re[c]allocarray?

Rich Felker <dalias@...c.org> writes:

> On Tue, Jul 21, 2020 at 04:18:35AM -0600, Ariadne Conill wrote:
>> Hello,
>> 
>> reallocarray and recallocarray are BSD extensions that solve similar issues as 
>> strlcpy/strlcat, but with array reallocations instead of strings.
>> 
>> reallocarray itself is already part of glibc since 2.28.
>> 
>> Unfortunately, while working on new ifupdown implementation for Alpine, I 
>> wanted to use recallocarray because it is very helpful in terms of pushing new 
>> strings to a string array (you will always maintain a NULL-terminated array, 
>> and you don't have to worry about it) -- but I discovered musl still does not 
>> have it.
>> 
>> Anyway, I think it would be useful to include both functions in musl 1.2.1.  
>> If everyone agrees, I'll make a patch.
>
> reallocarray is a straightforward wrapper around realloc that can be
> implemented portably to work with arbitrary underlying malloc and is
> fairly non-controversial. I think it was already loosely agreed at
> some point that we would eventually support this.
>
> recallocarray presumably needs to zero the new part which means it
> needs to know the old exact size, which means it depends on having
> either knowledge of implementation internals or a working, exact
> malloc_usable_size (AFAIK all legacy/existing ones except musl
> mallocng are broken and return a value greater than the originally
> allocated size). Implementing it interferes with safety of
> overriding/interposing malloc, and therefore I'm fairly strongly
> against it unless there's a widepread consensus between implementors
> that it should exist.

No, it's an argument:
void *recallocarray(void *ptr, size_t oldnmemb, size_t newnmemb, size_t size)

-- 
Leah Neukirchen  <leah@...u.org>  https://leahneukirchen.org/

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.