@@ -22,10 +22,11 @@ #import "OFDictionary_hashtable.h" #import "OFArray.h" #import "OFString.h" #import "OFXMLElement.h" +#import "OFInvalidArgumentException.h" #import "OFNotImplementedException.h" #import "autorelease.h" static struct { @@ -200,10 +201,14 @@ } - initWithObject: (id)object forKey: (id)key { + if (key == nil || object == nil) + @throw [OFInvalidArgumentException + exceptionWithClass: [self class]]; + return [self initWithKeysAndObjects: key, object, nil]; } - initWithObjects: (OFArray*)objects forKeys: (OFArray*)keys @@ -314,14 +319,20 @@ return YES; } - (BOOL)containsObject: (id)object { - void *pool = objc_autoreleasePoolPush(); - OFEnumerator *enumerator = [self objectEnumerator]; + void *pool; + OFEnumerator *enumerator; id currentObject; + if (object == nil) + return NO; + + pool = objc_autoreleasePoolPush(); + enumerator = [self objectEnumerator]; + while ((currentObject = [enumerator nextObject]) != nil) { if ([currentObject isEqual: object]) { objc_autoreleasePoolPop(pool); return YES; } @@ -332,14 +343,20 @@ return NO; } - (BOOL)containsObjectIdenticalTo: (id)object { - void *pool = objc_autoreleasePoolPush(); - OFEnumerator *enumerator = [self objectEnumerator]; + void *pool; + OFEnumerator *enumerator; id currentObject; + if (object == nil) + return NO; + + pool = objc_autoreleasePoolPush(); + enumerator = [self objectEnumerator]; + while ((currentObject = [enumerator nextObject]) != nil) { if (currentObject == object) { objc_autoreleasePoolPop(pool); return YES; }