Skip to content

Commit 6dea2bc

Browse files
authored
[SR-6398] Ensure CFSTR() is CFRetained because it is not permanent on Linux. (#1351)
1 parent 08afbe6 commit 6dea2bc

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

CoreFoundation/URL.subproj/CFURLComponents.c

+6-6
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ struct __CFURLComponents {
6363
static Boolean __CFURLComponentsEqual(CFTypeRef left, CFTypeRef right);
6464

6565
static CFStringRef __CFURLComponentsCopyDescription(CFTypeRef cf) {
66-
return CFSTR("A really nice CFURLComponents object");
66+
return CFRetain(CFSTR("A really nice CFURLComponents object"));
6767
}
6868

6969
CF_SWIFT_EXPORT void __CFURLComponentsDeallocate(CFURLComponentsRef instance) {
@@ -1054,7 +1054,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
10541054
}
10551055
}
10561056
else {
1057-
nameString = CFSTR("");
1057+
nameString = (CFStringRef)CFRetain(CFSTR(""));
10581058
}
10591059
nameRange.location = kCFNotFound;
10601060
valueRange.location = idx + 1;
@@ -1076,7 +1076,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
10761076
}
10771077
}
10781078
else {
1079-
valueString = CFSTR("");
1079+
valueString = (CFStringRef)CFRetain(CFSTR(""));
10801080
}
10811081
CFStringRef name = CFSTR("name");
10821082
CFTypeRef keys[] = {name, CFSTR("value")};
@@ -1101,7 +1101,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
11011101
}
11021102
}
11031103
else {
1104-
nameString = CFSTR("");
1104+
nameString = (CFStringRef)CFRetain(CFSTR(""));
11051105
}
11061106
CFStringRef name = CFSTR("name");
11071107
CFTypeRef keys[] = {name};
@@ -1131,7 +1131,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
11311131
}
11321132
}
11331133
else {
1134-
valueString = CFSTR("");
1134+
valueString = (CFStringRef)CFRetain(CFSTR(""));
11351135
}
11361136
CFStringRef name = CFSTR("name");
11371137
CFTypeRef keys[] = {name, CFSTR("value")};
@@ -1155,7 +1155,7 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
11551155
}
11561156
}
11571157
else {
1158-
nameString = CFSTR("");
1158+
nameString = (CFStringRef)CFRetain(CFSTR(""));
11591159
}
11601160
CFStringRef name = CFSTR("name");
11611161
CFTypeRef keys[] = {name};

TestFoundation/TestURL.swift

+14
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,7 @@ class TestURL : XCTestCase {
525525
class TestURLComponents : XCTestCase {
526526
static var allTests: [(String, (TestURLComponents) -> () throws -> Void)] {
527527
return [
528+
("test_queryItems", test_queryItems),
528529
("test_string", test_string),
529530
("test_port", test_portSetter),
530531
("test_url", test_url),
@@ -535,6 +536,19 @@ class TestURLComponents : XCTestCase {
535536
]
536537
}
537538

539+
func test_queryItems() {
540+
let urlString = "http://localhost:8080/foo?bar=&bar=baz"
541+
let url = URL(string: urlString)!
542+
543+
let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
544+
545+
var query = [String: String]()
546+
components?.queryItems?.forEach {
547+
query[$0.name] = $0.value ?? ""
548+
}
549+
XCTAssertEqual(["bar": "baz"], query)
550+
}
551+
538552
func test_string() {
539553
for obj in getTestData()! {
540554
let testDict = obj as! [String: Any]

0 commit comments

Comments
 (0)