From 9b0ef85f77f140be8dffa2f333070f0429c15bb2 Mon Sep 17 00:00:00 2001 From: DanielGordonIT <108084596+DanielGordonIT@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:50:25 -0400 Subject: [PATCH 1/3] Wraps file extension comparison components in strtolower() This avoids the issue where replacing file.PNG with newfile.png fails due to "PNG" not being equal to "png" --- app/Uploads/ImageRepo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Uploads/ImageRepo.php b/app/Uploads/ImageRepo.php index 1e58816a4..845067fdc 100644 --- a/app/Uploads/ImageRepo.php +++ b/app/Uploads/ImageRepo.php @@ -166,7 +166,7 @@ class ImageRepo */ public function updateImageFile(Image $image, UploadedFile $file): void { - if ($file->getClientOriginalExtension() !== pathinfo($image->path, PATHINFO_EXTENSION)) { + if (strtolower($file->getClientOriginalExtension()) !== strtolower(pathinfo($image->path, PATHINFO_EXTENSION))) { throw new ImageUploadException(trans('errors.image_upload_replace_type')); } From 25f92ce584cf058d225cbb3560b23ca558d60c0d Mon Sep 17 00:00:00 2001 From: DanielGordonIT <108084596+DanielGordonIT@users.noreply.github.com> Date: Thu, 4 Jul 2024 19:48:12 -0400 Subject: [PATCH 2/3] Add test to verify different case on extensions works --- tests/Uploads/ImageTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Uploads/ImageTest.php b/tests/Uploads/ImageTest.php index db500f606..e28880c95 100644 --- a/tests/Uploads/ImageTest.php +++ b/tests/Uploads/ImageTest.php @@ -119,6 +119,7 @@ class ImageTest extends TestCase $this->files->deleteAtRelativePath($relPath); } + public function test_image_file_update_does_not_allow_change_in_image_extension() { $page = $this->entities->page(); From ca310966b2ef52460c9ad7ca79dc707ff2ed3329 Mon Sep 17 00:00:00 2001 From: DanielGordonIT <108084596+DanielGordonIT@users.noreply.github.com> Date: Fri, 5 Jul 2024 03:59:49 +0000 Subject: [PATCH 3/3] Actually add the test this time --- tests/Uploads/ImageTest.php | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/Uploads/ImageTest.php b/tests/Uploads/ImageTest.php index e28880c95..2c36f5f35 100644 --- a/tests/Uploads/ImageTest.php +++ b/tests/Uploads/ImageTest.php @@ -119,6 +119,32 @@ class ImageTest extends TestCase $this->files->deleteAtRelativePath($relPath); } + public function test_image_file_update_allows_case_differences() + { + $page = $this->entities->page(); + $this->asEditor(); + + $imgDetails = $this->files->uploadGalleryImageToPage($this, $page); + $relPath = $imgDetails['path']; + + $newUpload = $this->files->uploadedImage('updated-image.PNG', 'compressed.png'); + $this->assertFileEquals($this->files->testFilePath('test-image.png'), public_path($relPath)); + + $imageId = $imgDetails['response']->id; + $image = Image::findOrFail($imageId); + $image->updated_at = now()->subMonth(); + $image->save(); + + $this->call('PUT', "/images/{$imageId}/file", [], [], ['file' => $newUpload]) + ->assertOk(); + + $this->assertFileEquals($this->files->testFilePath('compressed.png'), public_path($relPath)); + + $image->refresh(); + $this->assertTrue($image->updated_at->gt(now()->subMinute())); + + $this->files->deleteAtRelativePath($relPath); + } public function test_image_file_update_does_not_allow_change_in_image_extension() {