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/