Hi,
it seems that the implementation of countByEnumeratingWithState in
NSArray is broken.
The following code in NSArray.m
{
NSUInteger size = [self count];
NSInteger count;
/* This is cached in the caller at the start and compared at each
* iteration. If it changes during the iteration then
* objc_enumerationMutation() will be called, throwing an exception.
*/
state->mutationsPtr = (unsigned long *)size;
of course crashes as soon as any fast enumeration is executed for any
collection deriving from NSArray. The cast in the last line can't work.
Now I'm wondering how this problem could remain undiscovered or at least
unfixed for such a long time. I doubt that everybody who implemented a
class that derives from NSArray also re-implemented this method.
A simple fix would be to add an iVar that gets the result of [self
count] each time this method is called and assigning its address to
state->mutationsPtr.
Any chance for getting this fixed in the trunk version?
Regards,
Mathias
_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep