From 47572cdf7799f7ac9cd284d4a48e06b9e929065a Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 15 Nov 2005 05:42:36 +0000 Subject: * array.c (rb_ary_fill): should adjust array length correctly when an array is expanded in the fill process. [ruby-core:06625] git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@9539 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ array.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2f67f4a63..af23fedcd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Nov 15 14:39:16 2005 Yukihiro Matsumoto + + * array.c (rb_ary_fill): should adjust array length correctly when + an array is expanded in the fill process. [ruby-core:06625] + Mon Nov 14 23:49:57 2005 Nobuyoshi Nakada * file.c (rb_file_s_readlink): ERANGE will occur only on GPFS. diff --git a/array.c b/array.c index d14a49a71..e47ecf3fd 100644 --- a/array.c +++ b/array.c @@ -1088,6 +1088,7 @@ rb_ary_insert(argc, argv, ary) { long pos; + if (argc == 1) return ary; if (argc < 1) { rb_raise(rb_eArgError, "wrong number of arguments (at least 1)"); } @@ -1095,11 +1096,9 @@ rb_ary_insert(argc, argv, ary) if (pos == -1) { pos = RARRAY(ary)->len; } - else if (pos < 0) { + if (pos < 0) { pos++; } - - if (argc == 1) return ary; rb_ary_splice(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1)); return ary; } @@ -2265,7 +2264,6 @@ rb_ary_fill(argc, argv, ary) if (beg > RARRAY(ary)->len) { rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, end - RARRAY(ary)->len); } - RARRAY(ary)->len = end; } if (block_p) { @@ -2276,9 +2274,11 @@ rb_ary_fill(argc, argv, ary) v = rb_yield(LONG2NUM(i)); if (i>=RARRAY(ary)->len) break; RARRAY(ary)->ptr[i] = v; + RARRAY(ary)->len = i+1; } } else { + RARRAY(ary)->len = end; p = RARRAY(ary)->ptr + beg; pend = p + len; while (p < pend) { -- cgit