Index: src/OFMutableURL.m ================================================================== --- src/OFMutableURL.m +++ src/OFMutableURL.m @@ -235,18 +235,28 @@ } - (void)setQueryDictionary: (OFDictionary OF_GENERIC(OFString *, OFString *) *)dictionary { - void *pool = objc_autoreleasePoolPush(); - OFMutableString *URLEncodedQuery = [OFMutableString string]; - OFEnumerator *keyEnumerator = [dictionary keyEnumerator]; - OFEnumerator *objectEnumerator = [dictionary objectEnumerator]; - OFCharacterSet *characterSet = - [OFCharacterSet URLQueryKeyValueAllowedCharacterSet]; + void *pool; + OFMutableString *URLEncodedQuery; + OFEnumerator OF_GENERIC(OFString *) *keyEnumerator, *objectEnumerator; + OFCharacterSet *characterSet; OFString *key, *object, *old; + if (dictionary == nil) { + [_URLEncodedQuery release]; + _URLEncodedQuery = nil; + return; + } + + pool = objc_autoreleasePoolPush(); + URLEncodedQuery = [OFMutableString string]; + keyEnumerator = [dictionary keyEnumerator]; + objectEnumerator = [dictionary objectEnumerator]; + characterSet = [OFCharacterSet URLQueryKeyValueAllowedCharacterSet]; + while ((key = [keyEnumerator nextObject]) != nil && (object = [objectEnumerator nextObject]) != nil) { key = [key stringByURLEncodingWithAllowedCharacters: characterSet]; object = [object Index: src/OFURL.m ================================================================== --- src/OFURL.m +++ src/OFURL.m @@ -1036,14 +1036,20 @@ return _URLEncodedQuery; } - (OFDictionary OF_GENERIC(OFString *, OFString *) *)queryDictionary { - void *pool = objc_autoreleasePoolPush(); - OFArray *pairs = [_URLEncodedQuery componentsSeparatedByString: @"&"]; - OFMutableDictionary *ret = [OFMutableDictionary - dictionaryWithCapacity: pairs.count]; + void *pool; + OFArray OF_GENERIC(OFString *) *pairs; + OFMutableDictionary OF_GENERIC(OFString *, OFString *) *ret; + + if (_URLEncodedQuery == nil) + return nil; + + pool = objc_autoreleasePoolPush(); + pairs = [_URLEncodedQuery componentsSeparatedByString: @"&"]; + ret = [OFMutableDictionary dictionaryWithCapacity: pairs.count]; for (OFString *pair in pairs) { OFArray *parts = [pair componentsSeparatedByString: @"="]; if (parts.count != 2)