From 397a310fee8208d614788086b3285cc3d4854609 Mon Sep 17 00:00:00 2001 From: Matthias Glaub Date: Thu, 21 Oct 2021 09:14:32 +0200 Subject: [PATCH 1/3] add test case for urlencoded strings --- .../Service/AssetManagerTest.php | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/tests/AssetManagerTest/Service/AssetManagerTest.php b/tests/AssetManagerTest/Service/AssetManagerTest.php index 5370330d..4c3bb274 100644 --- a/tests/AssetManagerTest/Service/AssetManagerTest.php +++ b/tests/AssetManagerTest/Service/AssetManagerTest.php @@ -257,12 +257,12 @@ public function testSetExtensionFiltersNotDuplicate(): void $mimeResolver = new MimeResolver; $assetFilterManager->setMimeResolver($mimeResolver); $resolver->setAssetFilterManager($assetFilterManager); - + $response = new Response; $request = $this->getRequest(); // Have to change uri because asset-path would cause an infinite loop $request->setUri('http://localhost/base-path/blah.js'); - + $assetCacheManager = $this->getAssetCacheManagerMock(); $assetManager = new AssetManager($resolver->getAggregateResolver(), $config); $assetManager->setAssetCacheManager($assetCacheManager); @@ -505,6 +505,33 @@ public function testClearOutputBufferInSetAssetOnResponse(): void echo $response->getContent(); } + /** + * @dataProvider urlencodedDataProvider + */ + public function testUrlEncodedStringsWillBeDecoded($urlEncodedString, $urlDecodedString): void + { + $resolver = $this->createMock(ResolverInterface::class); + $resolver + ->expects($this->once()) + ->method('resolve') + ->with($urlDecodedString); + + $request = new Request(); + $request->setUri('http://localhost/' . $urlEncodedString); + + $assetManager = new AssetManager($resolver); + $assetManager->resolvesToAsset($request); + } + + public function urlencodedDataProvider() + { + yield ['sprite%402x.png', 'sprite@2x.png']; + yield ['some/folder/sprite%402x.png', 'some/folder/sprite@2x.png']; + + yield ['sprite@2x.png', 'sprite@2x.png']; + yield ['some/folder/sprite@2x.png', 'some/folder/sprite@2x.png']; + } + /** * @return string */ From e92cb26228e9f0650f7a2cadc11743af5e27d942 Mon Sep 17 00:00:00 2001 From: Matthias Glaub Date: Thu, 21 Oct 2021 09:16:54 +0200 Subject: [PATCH 2/3] fixes decoding of urlencoded strings --- src/AssetManager/Service/AssetManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AssetManager/Service/AssetManager.php b/src/AssetManager/Service/AssetManager.php index d9d6b094..c2d89fef 100644 --- a/src/AssetManager/Service/AssetManager.php +++ b/src/AssetManager/Service/AssetManager.php @@ -192,7 +192,7 @@ protected function resolve(RequestInterface $request) /* @var $uri \Laminas\Uri\UriInterface */ $uri = $request->getUri(); $fullPath = $uri->getPath(); - $path = substr($fullPath, strlen($request->getBasePath()) + 1); + $path = rawurldecode(substr($fullPath, strlen($request->getBasePath()) + 1)); $this->path = $path; $asset = $this->getResolver()->resolve($path); From d5becb785e445e926ca0e4d04d4a764b8d9728c9 Mon Sep 17 00:00:00 2001 From: Matthias Glaub Date: Thu, 21 Oct 2021 09:18:18 +0200 Subject: [PATCH 3/3] add typehints --- tests/AssetManagerTest/Service/AssetManagerTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/AssetManagerTest/Service/AssetManagerTest.php b/tests/AssetManagerTest/Service/AssetManagerTest.php index 4c3bb274..e698365a 100644 --- a/tests/AssetManagerTest/Service/AssetManagerTest.php +++ b/tests/AssetManagerTest/Service/AssetManagerTest.php @@ -508,7 +508,7 @@ public function testClearOutputBufferInSetAssetOnResponse(): void /** * @dataProvider urlencodedDataProvider */ - public function testUrlEncodedStringsWillBeDecoded($urlEncodedString, $urlDecodedString): void + public function testUrlEncodedStringsWillBeDecoded(string $urlEncodedString, string $urlDecodedString): void { $resolver = $this->createMock(ResolverInterface::class); $resolver @@ -523,7 +523,7 @@ public function testUrlEncodedStringsWillBeDecoded($urlEncodedString, $urlDecode $assetManager->resolvesToAsset($request); } - public function urlencodedDataProvider() + public function urlencodedDataProvider(): \Generator { yield ['sprite%402x.png', 'sprite@2x.png']; yield ['some/folder/sprite%402x.png', 'some/folder/sprite@2x.png'];