Skip to content

Commit 843bf80

Browse files
authored
(133301930) Bridging NSURLComponents to URLComponents loses percent-encoding (#831)
1 parent e34e1c9 commit 843bf80

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

Sources/FoundationEssentials/URL/URLComponents.swift

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,15 +1141,19 @@ extension URLComponents: ReferenceConvertible, _ObjectiveCBridgeable {
11411141
}
11421142

11431143
public static func _conditionallyBridgeFromObjectiveC(_ x: NSURLComponents, result: inout URLComponents?) -> Bool {
1144+
if let swiftComp = x as? _NSSwiftURLComponents {
1145+
result = swiftComp.components
1146+
return true
1147+
}
11441148
var comp = URLComponents()
11451149
comp.scheme = x.scheme
1146-
comp.user = x.user
1147-
comp.password = x.password
1148-
comp.host = x.host
1150+
comp.percentEncodedUser = x.percentEncodedUser
1151+
comp.percentEncodedPassword = x.percentEncodedPassword
1152+
comp.encodedHost = x.encodedHost
11491153
comp.port = x.port?.intValue
1150-
comp.path = x.path ?? ""
1151-
comp.query = x.query
1152-
comp.fragment = x.fragment
1154+
comp.percentEncodedPath = x.percentEncodedPath ?? ""
1155+
comp.percentEncodedQuery = x.percentEncodedQuery
1156+
comp.percentEncodedFragment = x.percentEncodedFragment
11531157
result = comp
11541158
return true
11551159
}

Tests/FoundationEssentialsTests/URLTests.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,4 +1082,20 @@ final class URLTests : XCTestCase {
10821082
XCTAssertEqual(comp.percentEncodedPath, "/my%00path")
10831083
XCTAssertEqual(comp.path, "/my\u{0}path")
10841084
}
1085+
1086+
#if FOUNDATION_FRAMEWORK
1087+
func testURLComponentsBridging() {
1088+
var nsURLComponents = NSURLComponents(
1089+
string: "https://example.com?url=https%3A%2F%2Fapple.com"
1090+
)!
1091+
var urlComponents = nsURLComponents as URLComponents
1092+
XCTAssertEqual(urlComponents.string, nsURLComponents.string)
1093+
1094+
urlComponents = URLComponents(
1095+
string: "https://example.com?url=https%3A%2F%2Fapple.com"
1096+
)!
1097+
nsURLComponents = urlComponents as NSURLComponents
1098+
XCTAssertEqual(urlComponents.string, nsURLComponents.string)
1099+
}
1100+
#endif
10851101
}

0 commit comments

Comments
 (0)