[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]