summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-06 01:31:27 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-02-06 01:31:27 +0000
commit78b1ca9f0f9f3f2ecc65342158af5e71b6fb8139 (patch)
tree3e9d0791ba74642cb60847ac453c2a215c8e31c7 /array.c
parent38a9831caaed025a30b3a3027cd5f6129b258758 (diff)
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.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/array.c b/array.c
index 088a9a5..5cf995c 100644
--- a/array.c
+++ b/array.c
@@ -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()) {