diff --git a/CoreFoundation/URL.subproj/CFURLComponents.c b/CoreFoundation/URL.subproj/CFURLComponents.c index 86dd9f1ece..ee1fa7de01 100644 --- a/CoreFoundation/URL.subproj/CFURLComponents.c +++ b/CoreFoundation/URL.subproj/CFURLComponents.c @@ -63,7 +63,7 @@ struct __CFURLComponents { static Boolean __CFURLComponentsEqual(CFTypeRef left, CFTypeRef right); static CFStringRef __CFURLComponentsCopyDescription(CFTypeRef cf) { - return CFSTR("A really nice CFURLComponents object"); + return CFRetain(CFSTR("A really nice CFURLComponents object")); } CF_SWIFT_EXPORT void __CFURLComponentsDeallocate(CFURLComponentsRef instance) { @@ -1054,7 +1054,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component } } else { - nameString = CFSTR(""); + nameString = (CFStringRef)CFRetain(CFSTR("")); } nameRange.location = kCFNotFound; valueRange.location = idx + 1; @@ -1076,7 +1076,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component } } else { - valueString = CFSTR(""); + valueString = (CFStringRef)CFRetain(CFSTR("")); } CFStringRef name = CFSTR("name"); CFTypeRef keys[] = {name, CFSTR("value")}; @@ -1101,7 +1101,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component } } else { - nameString = CFSTR(""); + nameString = (CFStringRef)CFRetain(CFSTR("")); } CFStringRef name = CFSTR("name"); CFTypeRef keys[] = {name}; @@ -1131,7 +1131,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component } } else { - valueString = CFSTR(""); + valueString = (CFStringRef)CFRetain(CFSTR("")); } CFStringRef name = CFSTR("name"); CFTypeRef keys[] = {name, CFSTR("value")}; @@ -1155,7 +1155,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component } } else { - nameString = CFSTR(""); + nameString = (CFStringRef)CFRetain(CFSTR("")); } CFStringRef name = CFSTR("name"); CFTypeRef keys[] = {name}; diff --git a/TestFoundation/TestURL.swift b/TestFoundation/TestURL.swift index e500dd1207..f0c809dd41 100644 --- a/TestFoundation/TestURL.swift +++ b/TestFoundation/TestURL.swift @@ -525,6 +525,7 @@ class TestURL : XCTestCase { class TestURLComponents : XCTestCase { static var allTests: [(String, (TestURLComponents) -> () throws -> Void)] { return [ + ("test_queryItems", test_queryItems), ("test_string", test_string), ("test_port", test_portSetter), ("test_url", test_url), @@ -535,6 +536,19 @@ class TestURLComponents : XCTestCase { ] } + func test_queryItems() { + let urlString = "http://localhost:8080/foo?bar=&bar=baz" + let url = URL(string: urlString)! + + let components = URLComponents(url: url, resolvingAgainstBaseURL: false) + + var query = [String: String]() + components?.queryItems?.forEach { + query[$0.name] = $0.value ?? "" + } + XCTAssertEqual(["bar": "baz"], query) + } + func test_string() { for obj in getTestData()! { let testDict = obj as! [String: Any]