diff options
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; |