diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-10-05 16:15:16 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-10-05 16:15:16 +0000 |
commit | 22f1926644a213a39cd8a3f83a80518e5c15797f (patch) | |
tree | 664beb18420f4bc9329dc37e52bdeafbf000037a /gc.c | |
parent | 313e0cb56aedfceb0bfaab2e430d2211c5e2043b (diff) |
* range.c (rb_range_beg_len): should return Qfalse for non-range
object.
* pack.c (EXTEND16): [ruby-dev:27383]
* eval.c (set_trace_func): add rb_secure(4) to prevent adding
tracing function.
* lib/delegate.rb: document update from James Edward Gray II
<james@grayproductions.net>. [ruby-core:05942]
* process.c (proc_daemon): should restrict execution on levels
higher than $SAFE=2. suggested by URABE Shyouhei
<shyouhei@ice.uec.ac.jp>.
* lib/forwardable.rb: replaced by new implementation from
<Daniel.Berger@qwest.com>. [ruby-core:05899]
* file.c (path_check_0): disallow sticky world writable directory
in PATH (and $LOAD_PATH). [ruby-dev:27226]
* numeric.c (fix_idiv): 1.div(1.0) should return integer value.
[ruby-dev:27235]
* lib/yaml.rb: require 'yaml/constants'. [ruby-core:5776]
* lib/xmlrpc/client.rb (XMLRPC::Client::do_rpc): add charset
information to content-type header.[ruby-core:5127]
* lib/xmlrpc/server.rb (CGIServer::serve): ditto.
* lib/xmlrpc/server.rb (ModRubyServer::serve): ditto.
* lib/xmlrpc/server.rb (WEBrickServlet::service): ditto.
* test/dbm/test_dbm.rb (TestDBM::test_s_open_error): remove
test_s_open_error test to detect duplicate open.
[ruby-dev:27202]
* eval.c (splat_value): use to_a to splat non Array object.
* object.c (nil_to_a): remove nil.to_a. [experimental]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9349 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 24 |
1 files changed, 22 insertions, 2 deletions
@@ -134,11 +134,21 @@ ruby_xmalloc(long size) } void * +ruby_xmalloc2(long n, long size) +{ + long len = size * n; + if (len < n || (n > 0 && len < size)) { + rb_raise(rb_eArgError, "malloc: possible integer overflow"); + } + return ruby_xmalloc(len); +} + +void * ruby_xcalloc(long n, long size) { void *mem; - mem = xmalloc(n * size); + mem = ruby_xmalloc2(n, size); memset(mem, 0, n * size); return mem; @@ -152,7 +162,7 @@ ruby_xrealloc(void *ptr, long size) if (size < 0) { rb_raise(rb_eArgError, "negative re-allocation size"); } - if (!ptr) return xmalloc(size); + if (!ptr) return ruby_xmalloc(size); if (size == 0) size = 1; malloc_increase += size; RUBY_CRITICAL(mem = realloc(ptr, size)); @@ -168,6 +178,16 @@ ruby_xrealloc(void *ptr, long size) return mem; } +void * +ruby_xrealloc2(void *ptr, long n, long size) +{ + long len = size * n; + if (len < n || (n > 0 && len < size)) { + rb_raise(rb_eArgError, "realloc: possible integer overflow"); + } + return ruby_xrealloc(ptr, len); +} + void ruby_xfree(void *x) { |