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

ruby-changes:25381

From: glass <ko1@a...>
Date: Sat, 3 Nov 2012 12:21:56 +0900 (JST)
Subject: [ruby-changes:25381] glass:r37438 (trunk): * array.c (recursive_equal): fix not to make invalid pointers when

glass	2012-11-03 12:21:47 +0900 (Sat, 03 Nov 2012)

  New Revision: 37438

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37438

  Log:
    * array.c (recursive_equal): fix not to make invalid pointers when
      self and other are resized to same size in #== of their elements.
      [ruby-dev:46373] [Feature #6177]

  Modified files:
    trunk/ChangeLog
    trunk/array.c

Index: array.c
===================================================================
--- array.c	(revision 37437)
+++ array.c	(revision 37438)
@@ -3269,18 +3269,20 @@
 static VALUE
 recursive_equal(VALUE ary1, VALUE ary2, int recur)
 {
-    long i;
+    long i, len1;
     VALUE *p1, *p2;
 
     if (recur) return Qtrue; /* Subtle! */
 
     p1 = RARRAY_PTR(ary1);
     p2 = RARRAY_PTR(ary2);
+    len1 = RARRAY_LEN(ary1);
 
-    for (i = 0; i < RARRAY_LEN(ary1); i++) {
+    for (i = 0; i < len1; i++) {
 	if (*p1 != *p2) {
 	    if (rb_equal(*p1, *p2)) {
-		if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2))
+		len1 = RARRAY_LEN(ary1);
+		if (len1 != RARRAY_LEN(ary2) || len1 < i)
 		    return Qfalse;
 		p1 = RARRAY_PTR(ary1) + i;
 		p2 = RARRAY_PTR(ary2) + i;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37437)
+++ ChangeLog	(revision 37438)
@@ -1,3 +1,9 @@
+Sat Nov  3 12:18:35 2012  Masaki Matsushita  <glass.saga@g...>
+
+	* array.c (recursive_equal): fix not to make invalid pointers when
+	  self and other are resized to same size in #== of their elements.
+	  [ruby-dev:46373] [Feature #6177]
+
 Sat Nov  3 12:06:15 2012  Kouhei Sutou  <kou@c...>
 
 	* test/rexml/test_xml_declaration.rb (TestXmlDeclaration#test_*):

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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