summaryrefslogtreecommitdiffhomepage
path: root/src/gc.c
diff options
context:
space:
mode:
authorMasaki Muranaka <[email protected]>2012-07-07 12:09:59 +0900
committerMasaki Muranaka <[email protected]>2012-07-07 12:09:59 +0900
commit47407768fdf118fa6fe3ead5b088b79397603ef6 (patch)
treeabbcd93b0e148e3d64587ff1f83f5eb6a7618ff5 /src/gc.c
parent8268ba2755ec467d100c799dbf53c13f38fda436 (diff)
downloadmruby-47407768fdf118fa6fe3ead5b088b79397603ef6.tar.gz
mruby-47407768fdf118fa6fe3ead5b088b79397603ef6.zip
Fix underlying bugs. mrb_calloc will be crashed in case "nelem == 0" or "p == NULL"
Diffstat (limited to 'src/gc.c')
-rw-r--r--src/gc.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/gc.c b/src/gc.c
index 2663e9780..5f30570de 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -167,10 +167,15 @@ mrb_malloc(mrb_state *mrb, size_t len)
void*
mrb_calloc(mrb_state *mrb, size_t nelem, size_t len)
{
- void *p = mrb_realloc(mrb, 0, nelem*len);
+ void *p;
+ size_t size;
+
+ size = nelem * len;
+ p = mrb_realloc(mrb, 0, size);
+
+ if (p && size > 0)
+ memset(p, 0, size);
- if (len > 0)
- memset(p, 0, nelem*len);
return p;
}