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

ruby-changes:7550

From: mame <ko1@a...>
Date: Tue, 2 Sep 2008 23:40:22 +0900 (JST)
Subject: [ruby-changes:7550] Ruby:r19071 (ruby_1_8): * marshal.c (w_object): add a check for modification of array during

mame	2008-09-02 23:40:08 +0900 (Tue, 02 Sep 2008)

  New Revision: 19071

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

  Log:
    * marshal.c (w_object): add a check for modification of array during
      its dump, backported r16761.

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/marshal.c

Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 19070)
+++ ruby_1_8/ChangeLog	(revision 19071)
@@ -1,3 +1,8 @@
+Tue Sep  2 23:39:45 2008  Yusuke Endoh  <mame@t...>
+
+	* marshal.c (w_object): add a check for modification of array during
+	  its dump, backported r16761.
+
 Tue Sep  2 14:48:55 2008  NAKAMURA Usaku  <usa@r...>
 
 	* win32/win32.c (gettimeofday): tv_usec is usec, not msec.
Index: ruby_1_8/marshal.c
===================================================================
--- ruby_1_8/marshal.c	(revision 19070)
+++ ruby_1_8/marshal.c	(revision 19071)
@@ -609,13 +609,14 @@
 	    w_uclass(obj, rb_cArray, arg);
 	    w_byte(TYPE_ARRAY, arg);
 	    {
-		long len = RARRAY(obj)->len;
-		VALUE *ptr = RARRAY(obj)->ptr;
+		long i, len = RARRAY_LEN(obj);
 
 		w_long(len, arg);
-		while (len--) {
-		    w_object(*ptr, arg, limit);
-		    ptr++;
+		for (i=0; i<RARRAY_LEN(obj); i++) {
+		    w_object(RARRAY_PTR(obj)[i], arg, limit);
+		    if (len != RARRAY_LEN(obj)) {
+			rb_raise(rb_eRuntimeError, "array modified during dump");
+		    }
 		}
 	    }
 	    break;

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

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