diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-12-06 07:52:18 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-12-06 07:52:18 +0000 |
commit | 088fb2a36ecc4e264e5952bf8157ee30c935fd0a (patch) | |
tree | 85defa29ffcd96708764da38bc210603e89aa5e8 /gc.c | |
parent | 445d6076d8f44e31bb04e45d9337c0ecfb763729 (diff) |
* gc.c (ruby_xmalloc2): change check for integer overflow.
[ruby-dev:27399]
* gc.c (ruby_xrealloc2): ditto.
* eval.c (exec_under): avoid accessing ruby_frame->prev.
[ruby-dev:27948]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 16 |
1 files changed, 8 insertions, 8 deletions
@@ -107,7 +107,7 @@ rb_memerror(void) } void * -ruby_xmalloc(long size) +ruby_xmalloc(size_t size) { void *mem; @@ -134,17 +134,17 @@ ruby_xmalloc(long size) } void * -ruby_xmalloc2(long n, long size) +ruby_xmalloc2(size_t n, size_t size) { long len = size * n; - if (len < n || (n > 0 && len < size)) { + if (n != 0 && size != len / n) { rb_raise(rb_eArgError, "malloc: possible integer overflow"); } return ruby_xmalloc(len); } void * -ruby_xcalloc(long n, long size) +ruby_xcalloc(size_t n, size_t size) { void *mem; @@ -155,7 +155,7 @@ ruby_xcalloc(long n, long size) } void * -ruby_xrealloc(void *ptr, long size) +ruby_xrealloc(void *ptr, size_t size) { void *mem; @@ -179,10 +179,10 @@ ruby_xrealloc(void *ptr, long size) } void * -ruby_xrealloc2(void *ptr, long n, long size) +ruby_xrealloc2(void *ptr, size_t n, size_t size) { - long len = size * n; - if (len < n || (n > 0 && len < size)) { + size_t len = size * n; + if (n != 0 && size != len / n) { rb_raise(rb_eArgError, "realloc: possible integer overflow"); } return ruby_xrealloc(ptr, len); |