diff --git a/NSArray.m b/NSArray.m index 59660b5e7..8592ac966 100644 --- a/NSArray.m +++ b/NSArray.m @@ -708,13 +708,20 @@ RETURN_ENUMERATOR(rcv, 0, 0); CHECK_MUTABLE(rcv); NSMutableArray *result = [NSMutableArray new]; - for (id elem in rcv) { + long len = [rcv count]; + for (long i = 0; i < len; i++) { + id elem = [rcv objectAtIndex:i]; VALUE test = rb_yield(OC2RB(elem)); RETURN_IF_BROKEN(); if (!RTEST(test)) { continue; } [result addObject:elem]; + const long n = [rcv count]; + if (n < len) { + // Array was modified. + len = n; + } } if ([result count] == [rcv count]) { return Qnil;