diff options
| author | Masaki Muranaka <[email protected]> | 2012-07-07 12:38:07 +0900 |
|---|---|---|
| committer | Masaki Muranaka <[email protected]> | 2012-07-07 12:38:07 +0900 |
| commit | a064038d85758c2e8add556f9aafa7823df53ef4 (patch) | |
| tree | 2b1786f80993bb941be451c4fd60883034f4dd55 | |
| parent | 47407768fdf118fa6fe3ead5b088b79397603ef6 (diff) | |
| download | mruby-a064038d85758c2e8add556f9aafa7823df53ef4.tar.gz mruby-a064038d85758c2e8add556f9aafa7823df53ef4.zip | |
Add a check for unsigned integer wrapping.
| -rw-r--r-- | src/gc.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -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; } |
