Index: src/OFURI.m ================================================================== --- src/OFURI.m +++ src/OFURI.m @@ -621,20 +621,11 @@ if (length > 0) OFEnsure(UTF8String[0] == '/'); } - if (length > 0 && UTF8String[0] == '/') - parsePathQueryFragment(self, UTF8String, length); - else { - _percentEncodedPath = [[OFString alloc] - initWithUTF8String: UTF8String - length: length]; - - OFURIVerifyIsEscaped(_percentEncodedPath, - [OFCharacterSet URIPathAllowedCharacterSet]); - } + parsePathQueryFragment(self, UTF8String, length); objc_autoreleasePoolPop(pool); } @catch (id e) { [self release]; @throw e; Index: tests/OFURITests.m ================================================================== --- tests/OFURITests.m +++ tests/OFURITests.m @@ -37,11 +37,11 @@ R(URI5 = [OFURI URIWithString: @"http://foo/bar/qux/foo%2fbar"]) && R(URI6 = [OFURI URIWithString: @"https://[12:34::56:abcd]/"]) && R(URI7 = [OFURI URIWithString: @"https://[12:34::56:abcd]:234/"]) && R(URI8 = [OFURI URIWithString: @"urn:qux:foo"]) && R(URI9 = [OFURI URIWithString: @"file:/foo?query#frag"]) && - R(URI10 = [OFURI URIWithString: @"file:foo@bar/qux"])) + R(URI10 = [OFURI URIWithString: @"file:foo@bar/qux?query#frag"])) EXPECT_EXCEPTION(@"+[URIWithString:] fails with invalid characters #1", OFInvalidFormatException, [OFURI URIWithString: @"ht,tp://foo"]) @@ -71,18 +71,10 @@ EXPECT_EXCEPTION(@"+[URIWithString:] fails with invalid characters #8", OFInvalidFormatException, [OFURI URIWithString: @"https://[f]:f/"]) - EXPECT_EXCEPTION(@"+[URIWithString:] fails with invalid characters #9", - OFInvalidFormatException, - [OFURI URIWithString: @"foo:bar?qux"]) - - EXPECT_EXCEPTION(@"+[URIWithString:] fails with invalid characters #10", - OFInvalidFormatException, - [OFURI URIWithString: @"foo:bar#qux"]) - TEST(@"+[URIWithString:relativeToURI:]", [[[OFURI URIWithString: @"/foo" relativeToURI: URI1] string] isEqual: @"ht%3atp://us%3Aer:p%40w@ho%3Ast:1234/foo"] && [[[OFURI URIWithString: @"foo/bar?q" relativeToURI: [OFURI URIWithString: @"http://h/qux/quux"]] @@ -154,11 +146,11 @@ [URI5.string isEqual: @"http://foo/bar/qux/foo%2fbar"] && [URI6.string isEqual: @"https://[12:34::56:abcd]/"] && [URI7.string isEqual: @"https://[12:34::56:abcd]:234/"] && [URI8.string isEqual: @"urn:qux:foo"] && [URI9.string isEqual: @"file:/foo?query#frag"] && - [URI10.string isEqual: @"file:foo@bar/qux"]) + [URI10.string isEqual: @"file:foo@bar/qux?query#frag"]) TEST(@"-[scheme]", [URI1.scheme isEqual: @"ht:tp"] && [URI4.scheme isEqual: @"file"] && [URI9.scheme isEqual: @"file"] && [URI10.scheme isEqual: @"file"]) @@ -197,18 +189,19 @@ [[[OFURI URIWithString: @"http://host/"] lastPathComponent] isEqual: @"/"] && [URI5.lastPathComponent isEqual: @"foo/bar"]) TEST(@"-[query]", [URI1.query isEqual: @"que#ry=1&f&oo=b=ar"] && URI4.query == nil && - [URI9.query isEqual: @"query"]) + [URI9.query isEqual: @"query"] && [URI10.query isEqual: @"query"]) TEST(@"-[queryItems]", [URI1.queryItems isEqual: [OFArray arrayWithObjects: [OFPair pairWithFirstObject: @"que#ry" secondObject: @"1"], [OFPair pairWithFirstObject: @"f&oo" secondObject: @"b=ar"], nil]]); TEST(@"-[fragment]", [URI1.fragment isEqual: @"frag#ment"] && URI4.fragment == nil && - [URI9.fragment isEqual: @"frag"] && URI10.fragment == nil) + [URI9.fragment isEqual: @"frag"] && + [URI10.fragment isEqual: @"frag"]) TEST(@"-[copy]", R(URI4 = [[URI1 copy] autorelease])) TEST(@"-[isEqual:]", [URI1 isEqual: URI4] && ![URI2 isEqual: URI3] && [[OFURI URIWithString: @"HTTP://bar/"] isEqual: URI3])