ruby-changes:25531
From: naruse <ko1@a...>
Date: Fri, 9 Nov 2012 20:04:15 +0900 (JST)
Subject: [ruby-changes:25531] naruse:r37588 (trunk): * array.c (rb_ary_splice): fix r37583 doesn't condier the case when
naruse 2012-11-09 20:04:05 +0900 (Fri, 09 Nov 2012) New Revision: 37588 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37588 Log: * array.c (rb_ary_splice): fix r37583 doesn't condier the case when beg > array length. Modified files: trunk/ChangeLog trunk/array.c trunk/test/ruby/test_array.rb Index: array.c =================================================================== --- array.c (revision 37587) +++ array.c (revision 37588) @@ -1438,7 +1438,7 @@ if (beg > ARY_MAX_SIZE - rlen) { rb_raise(rb_eIndexError, "index %ld too big", beg); } - ary_ensure_room_for_push(ary, rlen); + ary_ensure_room_for_push(ary, rlen-len); /* len is 0 or negative */ len = beg + rlen; rb_mem_clear(RARRAY_PTR(ary) + RARRAY_LEN(ary), beg - RARRAY_LEN(ary)); if (rlen > 0) { Index: ChangeLog =================================================================== --- ChangeLog (revision 37587) +++ ChangeLog (revision 37588) @@ -1,3 +1,8 @@ +Fri Nov 9 19:40:03 2012 NARUSE, Yui <naruse@r...> + + * array.c (rb_ary_splice): fix r37583 doesn't condier the case when + beg > array length. + Fri Nov 9 16:11:58 2012 Nobuyoshi Nakada <nobu@r...> * random.c (rb_memhash): use siphash. Index: test/ruby/test_array.rb =================================================================== --- test/ruby/test_array.rb (revision 37587) +++ test/ruby/test_array.rb (revision 37588) @@ -426,6 +426,18 @@ a = @cls[1, 2, 3] a[-1, 0] = a assert_equal([1, 2, 1, 2, 3, 3], a) + + a = @cls[] + a[5,0] = [5] + assert_equal([nil, nil, nil, nil, nil, 5], a) + + a = @cls[1] + a[1,0] = [2] + assert_equal([1, 2], a) + + a = @cls[1] + a[1,1] = [2] + assert_equal([1, 2], a) end def test_assoc -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/