On Thu, Mar 17, 2016 at 10:11:02AM +0100, Mattias Andrée wrote:
> Signed-off-by: Mattias Andrée <[email protected]>
> ---
>  libutil/ealloc.c       | 2 +-
>  libutil/reallocarray.c | 2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libutil/ealloc.c b/libutil/ealloc.c
> index 320865d..5a3cce1 100644
> --- a/libutil/ealloc.c
> +++ b/libutil/ealloc.c
> @@ -60,7 +60,7 @@ void *
>  enrealloc(int status, void *p, size_t size)
>  {
>       p = realloc(p, size);
> -     if (!p)
> +     if (!p && size)
>               enprintf(status, "realloc: out of memory\n");
>       return p;
>  }
> diff --git a/libutil/reallocarray.c b/libutil/reallocarray.c
> index c6e5219..b964626 100644
> --- a/libutil/reallocarray.c
> +++ b/libutil/reallocarray.c
> @@ -43,7 +43,7 @@ ereallocarray(void *optr, size_t nmemb, size_t size)
>  {
>       void *p;
>  
> -     if (!(p = reallocarray(optr, nmemb, size)))
> +     if (!(p = reallocarray(optr, nmemb, size)) && nmemb && size)
>               eprintf("reallocarray: out of memory\n");
>  
>       return p;

This is implementation-defined behaviour, exiting is also valid.  Don't
write code that relies on this idiom.

I am aware we have not documented this behaviour but that's minor in my
opinion.

Reply via email to