Index: src/OFDictionary.m ================================================================== --- src/OFDictionary.m +++ src/OFDictionary.m @@ -224,18 +224,21 @@ hash = [key hash]; for (i = hash & (size - 1); i < size && data[i].key != nil && ![data[i].key isEqual: key]; i++); + + if (data[i].key == nil) + return nil; /* In case the last bucket is already used */ if (i >= size) for (i = 0; i < size && data[i].key != nil && ![data[i].key isEqual: key]; i++); /* Key not in dictionary */ - if (i >= size || data[i].key == nil) + if (i >= size || ![data[i].key isEqual: key]) return nil; return data[i].object; } Index: src/OFMutableDictionary.m ================================================================== --- src/OFMutableDictionary.m +++ src/OFMutableDictionary.m @@ -85,11 +85,11 @@ if (i >= size) for (i = 0; i < size && data[i].key != nil && ![data[i].key isEqual: key]; i++); /* Key not in dictionary */ - if (i >= size || data[i].key == nil) { + if (i >= size || ![data[i].key isEqual: key]) { resize(self, isa, count + 1, &data, &size); i = hash & (size - 1); for (; i < size && data[i].key != nil; i++); @@ -124,18 +124,21 @@ hash = [key hash]; for (i = hash & (size - 1); i < size && data[i].key != nil && ![data[i].key isEqual: key]; i++); + + if (data[i].key == nil) + return self; /* In case the last bucket is already used */ if (i >= size) for (i = 0; i < size && data[i].key != nil && ![data[i].key isEqual: key]; i++); /* Key not in dictionary */ - if (i >= size || data[i].key == nil) + if (i >= size || ![data[i].key isEqual: key]) return self; [data[i].key release]; [data[i].object release]; data[i].key = nil;