From 0df6243d52d8c46ae714bb1eadf2a29db993c504 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 22 Apr 2019 11:36:54 -0700 Subject: [PATCH] Make calloc set ENOMEM when failing due to overflow. This fixes a bug in upstream dlmalloc, where it doesn't set errno to ENOMEM in overflow or footprint overrun cases. --- dlmalloc/src/malloc.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/dlmalloc/src/malloc.c b/dlmalloc/src/malloc.c index 490d898..29ce556 100644 --- a/dlmalloc/src/malloc.c +++ b/dlmalloc/src/malloc.c @@ -4055,12 +4055,26 @@ static void* sys_alloc(mstate m, size_t nb) { } asize = granularity_align(nb + SYS_ALLOC_PADDING); +#ifdef __wasilibc_unmodified_upstream // Bug fix: set ENOMEM on size overflow if (asize <= nb) return 0; /* wraparound */ +#else + if (asize <= nb) { + MALLOC_FAILURE_ACTION; + return 0; /* wraparound */ + } +#endif if (m->footprint_limit != 0) { size_t fp = m->footprint + asize; +#ifdef __wasilibc_unmodified_upstream // Bug fix: set ENOMEM on footprint overrun if (fp <= m->footprint || fp > m->footprint_limit) return 0; +#else + if (fp <= m->footprint || fp > m->footprint_limit) { + MALLOC_FAILURE_ACTION; + return 0; + } +#endif } /*