]> BookStack Code Mirror - bookstack/commitdiff
Merge image name cleaning functions
authorDan Brown <redacted>
Sun, 14 Mar 2021 23:20:21 +0000 (23:20 +0000)
committerDan Brown <redacted>
Sun, 14 Mar 2021 23:20:21 +0000 (23:20 +0000)
Updated testing for changes and to check existing of new expected file
name.
Related to #2611

app/Uploads/ImageService.php
tests/Uploads/ImageTest.php
tests/Uploads/UsesImages.php

index ee42e6e3345066ca26d9eac4449cc8ade2691610..02fe2e8ef35c48a640411958e124426d629803c2 100644 (file)
@@ -60,7 +60,7 @@ class ImageService
         int $resizeHeight = null,
         bool $keepRatio = true
     ) {
-        $imageName = $this->sanitizeFileName($uploadedFile->getClientOriginalName());
+        $imageName = $uploadedFile->getClientOriginalName();
         $imageData = file_get_contents($uploadedFile->getRealPath());
 
         if ($resizeWidth !== null || $resizeHeight !== null) {
@@ -139,7 +139,7 @@ class ImageService
         $name = str_replace(' ', '-', $name);
         $nameParts = explode('.', $name);
         $extension = array_pop($nameParts);
-        $name = implode('.', $nameParts);
+        $name = implode('-', $nameParts);
         $name = Str::slug($name);
 
         if (strlen($name) === 0) {
@@ -426,15 +426,4 @@ class ImageService
         $basePath = ($this->storageUrl == false) ? url('/') : $this->storageUrl;
         return rtrim($basePath, '/') . $filePath;
     }
-
-    /**
-     * Returns a sanitized filename with only one file extension
-     */
-    private function sanitizeFileName(string $fileName): string
-    {
-        $parts = explode('.', $fileName);
-        $extension = array_pop($parts);
-
-        return sprintf('%s.%s', implode('-', $parts), $extension);
-    }
 }
index 55d580e46eab38b4d791419d2c0e274bf51164e9..bd52607d1d60e71b24895f74a7bf0a57ca17b5cc 100644 (file)
@@ -167,25 +167,25 @@ class ImageTest extends TestCase
 
     public function test_files_with_double_extensions_will_get_sanitized()
     {
-        $page = Page::first();
+        $page = Page::query()->first();
         $admin = $this->getAdmin();
         $this->actingAs($admin);
 
         $fileName = 'bad.phtml.png';
         $relPath = $this->getTestImagePath('gallery', $fileName);
-        $this->deleteImage($relPath);
+        $expectedRelPath = dirname($relPath) . '/bad-phtml.png';
+        $this->deleteImage($expectedRelPath);
 
         $file = $this->newTestImageFromBase64('bad-phtml-png.base64', $fileName);
         $upload = $this->withHeader('Content-Type', 'image/png')->call('POST', '/images/gallery', ['uploaded_to' => $page->id], [], ['file' => $file], []);
         $upload->assertStatus(200);
 
         $lastImage = Image::query()->latest('id')->first();
-        $newFileName = explode('.', basename($lastImage->path))[0];
-
-        $this->assertEquals($lastImage->name, 'bad-phtml.png');
-        $this->assertFalse(file_exists(public_path($relPath)), 'Uploaded image file name was not stripped of dots');
 
-        $this->assertTrue(strlen($newFileName) > 0, 'File name was reduced to nothing');
+        $this->assertEquals('bad.phtml.png', $lastImage->name);
+        $this->assertEquals('bad-phtml.png', basename($lastImage->path));
+        $this->assertFileNotExists(public_path($relPath), 'Uploaded image file name was not stripped of dots');
+        $this->assertFileExists(public_path($expectedRelPath));
 
         $this->deleteImage($lastImage->path);
     }
index a2026d96845050ea8736c1d59e153d40db611ebd..24c253802f23dd72ccc2d4252ba79334b2a105c2 100644 (file)
@@ -100,9 +100,8 @@ trait UsesImages
 
     /**
      * Delete an uploaded image.
-     * @param $relPath
      */
-    protected function deleteImage($relPath)
+    protected function deleteImage(string $relPath)
     {
         $path = public_path($relPath);
         if (file_exists($path)) {