diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-02 15:29:11 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-06-02 15:29:11 +0000 |
commit | 41a1a4ed7633e02965dc1de593d16b7e1635c129 (patch) | |
tree | 90cd09e48610da8b34f55dcded9ca024a21b629f /marshal.c | |
parent | 924836c08054f61776bb4ef9c9b3b5d4986c26d5 (diff) | |
download | ruby-41a1a4ed7633e02965dc1de593d16b7e1635c129.tar.gz |
* marshal.c (w_object): add a check for modification of array during
its dump.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'marshal.c')
-rw-r--r-- | marshal.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -703,13 +703,14 @@ w_object(VALUE obj, struct dump_arg *arg, int limit) w_uclass(obj, rb_cArray, arg); w_byte(TYPE_ARRAY, arg); { - long len = RARRAY_LEN(obj); - VALUE *ptr = RARRAY_PTR(obj); + 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; |