diff options
Diffstat (limited to 'usr/src/lib/libmtmalloc/common/mtmalloc.c')
-rw-r--r-- | usr/src/lib/libmtmalloc/common/mtmalloc.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/usr/src/lib/libmtmalloc/common/mtmalloc.c b/usr/src/lib/libmtmalloc/common/mtmalloc.c index 91d9ae2371..0cf998c952 100644 --- a/usr/src/lib/libmtmalloc/common/mtmalloc.c +++ b/usr/src/lib/libmtmalloc/common/mtmalloc.c @@ -331,7 +331,19 @@ void * calloc(size_t nelem, size_t bytes) { void * ptr; - size_t size = nelem * bytes; + size_t size; + + if (nelem == 0 || bytes == 0) { + size = 0; + } else { + size = nelem * bytes; + + /* check for overflow */ + if ((size / nelem) != bytes) { + errno = ENOMEM; + return (NULL); + } + } ptr = malloc(size); if (ptr == NULL) |