summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-12-06 07:52:18 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-12-06 07:52:18 +0000
commit088fb2a36ecc4e264e5952bf8157ee30c935fd0a (patch)
tree85defa29ffcd96708764da38bc210603e89aa5e8 /gc.c
parent445d6076d8f44e31bb04e45d9337c0ecfb763729 (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.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/gc.c b/gc.c
index fdd42605f8..887551444a 100644
--- a/gc.c
+++ b/gc.c
@@ -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);