diff options
| author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-02 14:40:08 +0000 |
|---|---|---|
| committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-02 14:40:08 +0000 |
| commit | 692ce765054531e65f99ec67f42144746ec8a6e9 (patch) | |
| tree | dd0267b44193b6dac813c09a7bb539234a090584 | |
| parent | 82df70d08c56fcbdd6de7d270b868a5b25f2f0c7 (diff) | |
* marshal.c (w_object): add a check for modification of array during
its dump, backported r16761.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@19071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | marshal.c | 11 |
2 files changed, 11 insertions, 5 deletions
@@ -1,3 +1,8 @@ +Tue Sep 2 23:39:45 2008 Yusuke Endoh <mame@tsg.ne.jp> + + * 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@ruby-lang.org> * win32/win32.c (gettimeofday): tv_usec is usec, not msec. @@ -609,13 +609,14 @@ w_object(obj, arg, limit) 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; |
