|
Message-ID: <2402240.lMG0q3WddN@petrie> Date: Sat, 01 Aug 2020 10:23:35 -0600 From: Ariadne Conill <ariadne@...eferenced.org> To: musl@...ts.openwall.com Cc: Markus Wichmann <nullplan@....net> Subject: Re: [PATCH] implement recallocarray(3) On Saturday, 1 August 2020 09:52:28 MDT Markus Wichmann wrote: > 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? Good catch. I decided to use reallocarray() simply for clarity, but I can change it to a realloc() call. Ariadne
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.