diff options
author | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-02 22:44:17 +0000 |
---|---|---|
committer | marcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-04-02 22:44:17 +0000 |
commit | 94ab139bc9df6016090596468f4139b1772ad882 (patch) | |
tree | 3d5ebd10ff34f3dedc2fb75307c89f190099e14a /array.c | |
parent | d0a98a0e90c9ff969da0c477f0f4cedb018b54b1 (diff) |
* array.c (rb_ary_product): Make defensive copy in case of block...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27202 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -4103,7 +4103,11 @@ rb_ary_product(int argc, VALUE *argv, VALUE ary) } /* Otherwise, allocate and fill in an array of results */ - if (!rb_block_given_p()) { + if (rb_block_given_p()) { + /* Make defensive copies of arrays */ + for (i = 0; i < n; i++) arrays[i] = ary_make_substitution(arrays[i]); + } + else { result = rb_ary_new2(resultlen); } for (i = 0; i < resultlen; i++) { |