diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-06 01:31:27 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-06 01:31:27 +0000 |
commit | 78b1ca9f0f9f3f2ecc65342158af5e71b6fb8139 (patch) | |
tree | 3e9d0791ba74642cb60847ac453c2a215c8e31c7 /array.c | |
parent | 38a9831caaed025a30b3a3027cd5f6129b258758 (diff) | |
download | ruby-78b1ca9f0f9f3f2ecc65342158af5e71b6fb8139.tar.gz |
array.c: comment why rb_ary_modify is needed twice
* array.c (rb_ary_initialize): NUM2LONG() may call size.to_int,
ary can be frozen, modified, etc, so recheck after argument
conversion is necessary. [Closes GH-526]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44855 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -735,12 +735,14 @@ rb_ary_initialize(int argc, VALUE *argv, VALUE ary) } len = NUM2LONG(size); + /* NUM2LONG() may call size.to_int, ary can be frozen, modified, etc */ if (len < 0) { rb_raise(rb_eArgError, "negative array size"); } if (len > ARY_MAX_SIZE) { rb_raise(rb_eArgError, "array size too big"); } + /* recheck after argument conversion */ rb_ary_modify(ary); ary_resize_capa(ary, len); if (rb_block_given_p()) { |