Skip to content

Commit 921e0d8

Browse files
authored
Merge pull request #719 from saiHemak/nsurlqueryitem
2 parents e8b5603 + 807bd72 commit 921e0d8

File tree

3 files changed

+30
-8
lines changed

3 files changed

+30
-8
lines changed

CoreFoundation/URL.subproj/CFURLComponents.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,8 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
10731073
else {
10741074
valueString = CFSTR("");
10751075
}
1076-
CFTypeRef keys[] = {CFSTR("name"), CFSTR("value")};
1076+
CFStringRef name = CFSTR("name");
1077+
CFTypeRef keys[] = {name, CFSTR("value")};
10771078
CFTypeRef values[] = {nameString, valueString};
10781079
CFDictionaryRef entry = CFDictionaryCreate(kCFAllocatorSystemDefault, keys, values, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
10791080
CFArrayAppendValue(intermediateResult, entry);
@@ -1097,7 +1098,8 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
10971098
else {
10981099
nameString = CFSTR("");
10991100
}
1100-
CFTypeRef keys[] = {CFSTR("name")};
1101+
CFStringRef name = CFSTR("name");
1102+
CFTypeRef keys[] = {name};
11011103
CFTypeRef values[] = {nameString};
11021104
CFDictionaryRef entry = CFDictionaryCreate(kCFAllocatorSystemDefault, keys, values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
11031105
CFArrayAppendValue(intermediateResult, entry);
@@ -1126,7 +1128,8 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
11261128
else {
11271129
valueString = CFSTR("");
11281130
}
1129-
CFTypeRef keys[] = {CFSTR("name"), CFSTR("value")};
1131+
CFStringRef name = CFSTR("name");
1132+
CFTypeRef keys[] = {name, CFSTR("value")};
11301133
CFTypeRef values[] = {nameString, valueString};
11311134
CFDictionaryRef entry = CFDictionaryCreate(kCFAllocatorSystemDefault, keys, values, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
11321135
CFArrayAppendValue(intermediateResult, entry);
@@ -1148,7 +1151,8 @@ CF_EXPORT CFArrayRef _CFURLComponentsCopyQueryItems(CFURLComponentsRef component
11481151
else {
11491152
nameString = CFSTR("");
11501153
}
1151-
CFTypeRef keys[] = {CFSTR("name")};
1154+
CFStringRef name = CFSTR("name");
1155+
CFTypeRef keys[] = {name};
11521156
CFTypeRef values[] = {nameString};
11531157
CFDictionaryRef entry = CFDictionaryCreate(kCFAllocatorSystemDefault, keys, values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
11541158
CFArrayAppendValue(intermediateResult, entry);
@@ -1206,7 +1210,7 @@ CF_EXPORT void _CFURLComponentsSetQueryItems(CFURLComponentsRef components, CFAr
12061210
chars[0] = '=';
12071211
CFStringAppendCharactersToAppendBuffer(&buf, chars, 1);
12081212
CFStringRef stringWithPercentEncoding = _CFStringCreateByAddingPercentEncodingWithAllowedCharacters(kCFAllocatorSystemDefault, value, queryNameValueAllowed);
1209-
CFStringAppendStringToAppendBuffer(&buf, value);
1213+
CFStringAppendStringToAppendBuffer(&buf, stringWithPercentEncoding);
12101214
CFRelease(stringWithPercentEncoding);
12111215
}
12121216
// else the query item string will be simply "name"

Foundation/NSURL.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,8 +1256,9 @@ open class NSURLComponents: NSObject, NSCopying {
12561256

12571257
return (0..<count).map { idx in
12581258
let oneEntry = unsafeBitCast(CFArrayGetValueAtIndex(queryArray, idx), to: NSDictionary.self)
1259-
let entryName = oneEntry.object(forKey: "name"._cfObject) as! String
1260-
let entryValue = oneEntry.object(forKey: "value"._cfObject) as? String
1259+
let swiftEntry = oneEntry._swiftObject
1260+
let entryName = swiftEntry["name"] as! String
1261+
let entryValue = swiftEntry["value"] as? String
12611262
return URLQueryItem(name: entryName, value: entryValue)
12621263
}
12631264
} else {

TestFoundation/TestNSURL.swift

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,8 @@ class TestNSURLComponents : XCTestCase {
446446
("test_string", test_string),
447447
("test_port", test_portSetter),
448448
("test_url", test_url),
449-
("test_copy", test_copy)
449+
("test_copy", test_copy),
450+
("test_createURLWithComponents", test_createURLWithComponents)
450451
]
451452
}
452453

@@ -524,4 +525,20 @@ class TestNSURLComponents : XCTestCase {
524525
/* Assert that NSURLComponents.copy is actually a copy of NSURLComponents */
525526
XCTAssertTrue(copy.isEqual(urlComponent))
526527
}
528+
529+
func test_createURLWithComponents() {
530+
let urlComponents = NSURLComponents()
531+
urlComponents.scheme = "https";
532+
urlComponents.host = "com.test.swift";
533+
urlComponents.path = "/test/path";
534+
let date = Date()
535+
let query1 = URLQueryItem(name: "date", value: date.description)
536+
let query2 = URLQueryItem(name: "simpleDict", value: "false")
537+
let query3 = URLQueryItem(name: "checkTest", value: "false")
538+
let query4 = URLQueryItem(name: "someKey", value: "afsdjhfgsdkf^fhdjgf")
539+
urlComponents.queryItems = [query1, query2, query3, query4]
540+
XCTAssertNotNil(urlComponents.url?.query)
541+
XCTAssertEqual(urlComponents.queryItems?.count, 4)
542+
}
543+
527544
}

0 commit comments

Comments
 (0)