From 44347299944fee9d278e21f2e1742df370a59b02 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 22 Sep 2004 04:47:37 +0000 Subject: * hash.c (rb_hash_rehash): add iteration check. [ruby-dev:24301] * st.c (st_foreach): add deep check. * array.c (rb_ary_collect_bang): element size might change during comparison. [ruby-dev:24300] * array.c (rb_ary_reject_bang): ditto. [ruby-dev:24300] * array.c (rb_ary_eql): ditto. [ruby-dev:24300] git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@6949 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- array.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index b921e55a2..da32a8984 100644 --- a/array.c +++ b/array.c @@ -1717,7 +1717,7 @@ rb_ary_collect_bang(ary) rb_ary_modify(ary); for (i = 0; i < RARRAY(ary)->len; i++) { - RARRAY(ary)->ptr[i] = rb_yield(RARRAY(ary)->ptr[i]); + rb_ary_store(ary, i, rb_yield(RARRAY(ary)->ptr[i])); } return ary; } @@ -1983,14 +1983,16 @@ rb_ary_reject_bang(ary) rb_ary_modify(ary); for (i1 = i2 = 0; i1 < RARRAY(ary)->len; i1++) { - if (RTEST(rb_yield(RARRAY(ary)->ptr[i1]))) continue; + VALUE v = RARRAY(ary)->ptr[i1]; + if (RTEST(rb_yield(v))) continue; if (i1 != i2) { - RARRAY(ary)->ptr[i2] = RARRAY(ary)->ptr[i1]; + rb_ary_store(ary, i2, v); } i2++; } if (RARRAY(ary)->len == i2) return Qnil; - RARRAY(ary)->len = i2; + if (i2 < RARRAY(ary)->len) + RARRAY(ary)->len = i2; return ary; } @@ -2497,7 +2499,7 @@ rb_ary_eql(ary1, ary2) if (TYPE(ary2) != T_ARRAY) return Qfalse; if (RARRAY(ary1)->len != RARRAY(ary2)->len) return Qfalse; for (i=0; ilen; i++) { - if (!rb_eql(RARRAY(ary1)->ptr[i], RARRAY(ary2)->ptr[i])) + if (!rb_eql(rb_ary_elt(ary1, i), rb_ary_elt(ary2, i))) return Qfalse; } return Qtrue; -- cgit