]> BookStack Code Mirror - bookstack/commitdiff
Merge pull request #5096 from DanielGordonIT/normalize-file-extensions
authorDan Brown <redacted>
Sun, 14 Jul 2024 12:51:55 +0000 (13:51 +0100)
committerGitHub <redacted>
Sun, 14 Jul 2024 12:51:55 +0000 (13:51 +0100)
Wraps file extension comparison components in strtolower()

app/Uploads/ImageRepo.php
tests/Uploads/ImageTest.php

index 1e58816a4f3fc0b2da387896f78e558d1be87fde..845067fdc29987e318633a079c11f98ef3d6deef 100644 (file)
@@ -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'));
         }
 
index db500f606691fa84de8aedea8eb68ee19d6268e8..2c36f5f356ed575d546ea640cab9e00b0e78749a 100644 (file)
@@ -119,6 +119,33 @@ 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()
     {
         $page = $this->entities->page();