|
|
Message-ID: <20200801155228.GC2076@voyager>
Date: Sat, 1 Aug 2020 17:52:28 +0200
From: Markus Wichmann <nullplan@....net>
To: musl@...ts.openwall.com
Subject: Re: [PATCH] implement recallocarray(3)
On Sat, Aug 01, 2020 at 08:46:58AM -0600, Ariadne Conill wrote:
> +void *recallocarray(void *ptr, size_t om, size_t m, size_t n)
> +{
> + void *newptr;
> + size_t old_size, new_size;
> +
> + if (n && m > -1 / n) {
> + errno = ENOMEM;
> + return 0;
> + }
> + new_size = m * n;
> +
> + if (n && om > -1 / n) {
> + errno = EINVAL;
> + return 0;
> + }
> + old_size = om * n;
> +
> + if (new_size <= old_size) {
> + memset((char *) ptr + new_size, 0, old_size - new_size);
> + }
> +
> + newptr = reallocarray(ptr, m, n);
> + if (new_size > old_size) {
> + memset((char *) ptr + old_size, 0, new_size - old_size);
> + }
> +
> + return newptr;
> +}
Is there a reason for the call to reallocarray? The multiplication m * n
has already been tested for overflow and executed at that point. Might
as well just call realloc() there, right?
JM2C,
Markus
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.