From 97b9caf8924c0aec76d53c56666e3bf0d13f39fd Mon Sep 17 00:00:00 2001 From: Masaki Muranaka Date: Tue, 11 Jun 2013 16:09:12 +0900 Subject: Check parameters strictly. calloc in C99 is expected to return NULL when nelem * len == 0. --- src/gc.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/gc.c b/src/gc.c index 6419726eb..293fbf948 100644 --- a/src/gc.c +++ b/src/gc.c @@ -184,15 +184,19 @@ mrb_malloc(mrb_state *mrb, size_t len) void* mrb_calloc(mrb_state *mrb, size_t nelem, size_t len) { - void *p = NULL; - size_t size; + void *p; - if (nelem <= SIZE_MAX / len) { + if (nelem > 0 && len > 0 && + nelem <= SIZE_MAX / len) { + size_t size; size = nelem * len; p = mrb_realloc(mrb, 0, size); - if (p && size > 0) + if (p) { memset(p, 0, size); + } + } else { + p = NULL; } return p; -- cgit v1.2.3