From d140d5e1659b3804f90f2e2f7f1b8e304a66decc Mon Sep 17 00:00:00 2001 From: qqz003 Date: Wed, 30 Oct 2024 19:34:23 +0800 Subject: [PATCH] Encode the style URL in iOS (#2965) --- platform/darwin/src/http_file_source.mm | 5 +++-- platform/darwin/test/MLNResourceTests.mm | 11 +++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/platform/darwin/src/http_file_source.mm b/platform/darwin/src/http_file_source.mm index 007a0b902..d8fbf8843 100644 --- a/platform/darwin/src/http_file_source.mm +++ b/platform/darwin/src/http_file_source.mm @@ -226,8 +226,9 @@ BOOL isValidMapboxEndpoint(NSURL *url) { MLN_APPLE_EXPORT NSURL *resourceURL(const Resource& resource) { - NSURL *url = [NSURL URLWithString:@(resource.url.c_str())]; - + NSString *encodedUrlString = [@(resource.url.c_str()) stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]; + NSURL *url = [NSURL URLWithString:encodedUrlString]; + #if TARGET_OS_IPHONE || TARGET_OS_SIMULATOR if (isValidMapboxEndpoint(url)) { NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO]; diff --git a/platform/darwin/test/MLNResourceTests.mm b/platform/darwin/test/MLNResourceTests.mm index 401670eec..6ad67d632 100644 --- a/platform/darwin/test/MLNResourceTests.mm +++ b/platform/darwin/test/MLNResourceTests.mm @@ -86,4 +86,15 @@ namespace mbgl { [self internalTestOfflineQueryParameterIsAddedForOfflineResource:testURL]; } +- (void)testResourceURL { + using namespace mbgl; + + // Test URL with characters requiring encoding + Resource resource(Resource::Kind::Unknown, "https://example.com/test?param1=a|b¶m2=c|d"); + NSURL *url = resourceURL(resource); + + XCTAssertNotNil(url); + XCTAssertEqualObjects(url.absoluteString, @"https://example.com/test?param1=a%7Cb¶m2=c%7Cd"); +} + @end