Skip to content

Commit 8d34af5

Browse files
authored
Fix double encoding of path parameters (#14)
Fix double encoding of path parameters ### Motivation Fixes apple/swift-openapi-generator#251. ### Modifications Use the already escaped path setter on `URLComponents` to avoid the second encoding pass. ### Result Path parameters that needed escaping are only escaped once, not twice. ### Test Plan Adapted the existing unit test to cover a path item that needs escaping. Reviewed by: simonjbeaumont Builds: ✔︎ pull request validation (5.8) - Build finished. ✔︎ pull request validation (5.9) - Build finished. ✔︎ pull request validation (nightly) - Build finished. ✔︎ pull request validation (soundness) - Build finished. #14
1 parent 294b1e9 commit 8d34af5

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

Diff for: Sources/OpenAPIURLSession/URLSessionTransport.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ extension URLRequest {
160160
guard var baseUrlComponents = URLComponents(string: baseURL.absoluteString) else {
161161
throw URLSessionTransportError.invalidRequestURL(request: request, baseURL: baseURL)
162162
}
163-
baseUrlComponents.path += request.path
163+
baseUrlComponents.percentEncodedPath += request.path
164164
baseUrlComponents.percentEncodedQuery = request.query
165165
guard let url = baseUrlComponents.url else {
166166
throw URLSessionTransportError.invalidRequestURL(request: request, baseURL: baseURL)

Diff for: Tests/OpenAPIURLSessionTests/URLSessionTransportTests.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class URLSessionTransportTests: XCTestCase {
3232

3333
func testRequestConversion() throws {
3434
let request = OpenAPIRuntime.Request(
35-
path: "/hello/Maria",
35+
path: "/hello%20world/Maria",
3636
query: "greeting=Howdy",
3737
method: .post,
3838
headerFields: [
@@ -41,7 +41,7 @@ class URLSessionTransportTests: XCTestCase {
4141
body: Data("👋".utf8)
4242
)
4343
let urlRequest = try URLRequest(request, baseURL: URL(string: "http://example.com/api")!)
44-
XCTAssertEqual(urlRequest.url, URL(string: "http://example.com/api/hello/Maria?greeting=Howdy"))
44+
XCTAssertEqual(urlRequest.url, URL(string: "http://example.com/api/hello%20world/Maria?greeting=Howdy"))
4545
XCTAssertEqual(urlRequest.httpMethod, "POST")
4646
XCTAssertEqual(urlRequest.allHTTPHeaderFields, ["X-Mumble": "mumble"])
4747
XCTAssertEqual(urlRequest.httpBody, Data("👋".utf8))

0 commit comments

Comments
 (0)