From 62b1eb7ad056ab8ba258383ac26abe621c1103b6 Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 26 Mar 2024 15:06:08 +1300 Subject: [PATCH 1/3] Add an unit test to reproduce crash See https://github.com/wordpress-mobile/WordPress-iOS/issues/22891 --- WordPressKitTests/PluginDirectoryTests.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/WordPressKitTests/PluginDirectoryTests.swift b/WordPressKitTests/PluginDirectoryTests.swift index 13b9f1a8..88671778 100644 --- a/WordPressKitTests/PluginDirectoryTests.swift +++ b/WordPressKitTests/PluginDirectoryTests.swift @@ -343,4 +343,16 @@ class PluginDirectoryTests: XCTestCase { XCTAssertTrue(lhs == rhs) } + + func testUnconventionalPluginSlug() async throws { + let data = try MockPluginDirectoryProvider.getPluginDirectoryMockData(with: "plugin-directory-rename-xml-rpc", sender: type(of: self)) + stub(condition: isHost("api.wordpress.org")) { _ in + HTTPStubsResponse(data: data, statusCode: 200, headers: ["Content-Type": "application/json"]) + } + + let _ = try await PluginDirectoryServiceRemote().getPluginInformation(slug: "%-is-not-allowed") + let _ = try await PluginDirectoryServiceRemote().getPluginInformation(slug: "中文") + + // No assertion needed. + } } From 719f8290ce425a7ad91a8c0f5ced97efc14a50dd Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 26 Mar 2024 15:09:56 +1300 Subject: [PATCH 2/3] Encode plugin slug into api url --- WordPressKit/PluginDirectoryServiceRemote.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WordPressKit/PluginDirectoryServiceRemote.swift b/WordPressKit/PluginDirectoryServiceRemote.swift index 5dd800b7..d46c3f19 100644 --- a/WordPressKit/PluginDirectoryServiceRemote.swift +++ b/WordPressKit/PluginDirectoryServiceRemote.swift @@ -58,7 +58,7 @@ public struct PluginDirectoryGetInformationEndpoint { func buildRequest() throws -> URLRequest { try HTTPRequestBuilder(url: PluginDirectoryRemoteConstants.getInformationEndpoint) - .append(percentEncodedPath: "\(slug).json") + .appendURLString("\(slug).json") .query(name: "fields", value: "icons,banners") .build() } From eb8733035def2e15a6a33d4eafc451df64f4a57c Mon Sep 17 00:00:00 2001 From: Tony Li Date: Tue, 26 Mar 2024 15:17:17 +1300 Subject: [PATCH 3/3] Add a changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 543863c2..b98f92b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,7 +42,7 @@ _None._ ### Bug Fixes -_None._ +- Fix crash when querying a WordPress plugin whose slug is not url-safe. [#767] ### Internal Changes