Index: src/OFDictionary.m ================================================================== --- src/OFDictionary.m +++ src/OFDictionary.m @@ -117,12 +117,29 @@ size = dict->size; count = dict->count; for (i = 0; i < size; i++) { if (dict->data[i].key != nil) { - data[i].key = [dict->data[i].key copy]; - data[i].object = [dict->data[i].object retain]; + OFObject *key; + + @try { + key = [dict->data[i].key copy]; + } @catch (OFException *e) { + [self dealloc]; + @throw e; + } + + @try { + [dict->data[i].object retain]; + } @catch (OFException *e) { + [key release]; + [self dealloc]; + @throw e; + } + + data[i].key = key; + data[i].object = dict->data[i].object; data[i].hash = dict->data[i].hash; } else data[i].key = nil; } Index: src/OFMutableDictionary.m ================================================================== --- src/OFMutableDictionary.m +++ src/OFMutableDictionary.m @@ -97,12 +97,20 @@ if (i >= size) for (i = 0; i < size && data[i].key != nil; i++); if (i >= size) @throw [OFOutOfRangeException newWithClass: isa]; - data[i].key = [key copy]; - data[i].object = [obj retain]; + key = [key copy]; + @try { + [obj retain]; + } @catch (OFException *e) { + [key release]; + @throw e; + } + + data[i].key = key; + data[i].object = obj; data[i].hash = hash; count++; return self; }