summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-06-11 00:25:50 -0700
committerYukihiro "Matz" Matsumoto <[email protected]>2013-06-11 00:25:50 -0700
commit16424a14dc3b1a70ef8ebe3923c3dbd482e77c93 (patch)
treeae315691b53250bdc8f8152996568e5c53ad3bd2
parentae288fe78dd610fe471200db0c73b00d9aca6dc0 (diff)
parent97b9caf8924c0aec76d53c56666e3bf0d13f39fd (diff)
downloadmruby-16424a14dc3b1a70ef8ebe3923c3dbd482e77c93.tar.gz
mruby-16424a14dc3b1a70ef8ebe3923c3dbd482e77c93.zip
Merge pull request #1278 from monaka/pr-calloc-improvement
Check parameters strictly.
-rw-r--r--src/gc.c12
1 files changed, 8 insertions, 4 deletions
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;