summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMasaki Muranaka <[email protected]>2012-07-07 12:38:07 +0900
committerMasaki Muranaka <[email protected]>2012-07-07 12:38:07 +0900
commita064038d85758c2e8add556f9aafa7823df53ef4 (patch)
tree2b1786f80993bb941be451c4fd60883034f4dd55
parent47407768fdf118fa6fe3ead5b088b79397603ef6 (diff)
downloadmruby-a064038d85758c2e8add556f9aafa7823df53ef4.tar.gz
mruby-a064038d85758c2e8add556f9aafa7823df53ef4.zip
Add a check for unsigned integer wrapping.
-rw-r--r--src/gc.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/gc.c b/src/gc.c
index 5f30570de..2149a2d43 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -167,14 +167,16 @@ mrb_malloc(mrb_state *mrb, size_t len)
void*
mrb_calloc(mrb_state *mrb, size_t nelem, size_t len)
{
- void *p;
+ void *p = NULL;
size_t size;
- size = nelem * len;
- p = mrb_realloc(mrb, 0, size);
+ if (nelem <= SIZE_MAX / len) {
+ size = nelem * len;
+ p = mrb_realloc(mrb, 0, size);
- if (p && size > 0)
- memset(p, 0, size);
+ if (p && size > 0)
+ memset(p, 0, size);
+ }
return p;
}