Use random imageHash to avoid collisions
authorjoshuaruesweg <ruesweg@woltlab.com>
Fri, 12 Mar 2021 10:38:03 +0000 (11:38 +0100)
committerjoshuaruesweg <ruesweg@woltlab.com>
Tue, 16 Mar 2021 15:19:16 +0000 (16:19 +0100)
wcfsetup/install/files/lib/system/background/job/UnfurlUrlBackgroundJob.class.php

index 5345d247ba10fb9b76b85c7551412bb7f0b217da..b1a114f665fc044e625fa3c997f64ecdbba60b88 100644 (file)
@@ -201,14 +201,17 @@ final class UnfurlUrlBackgroundJob extends AbstractBackgroundJob
 
     private function saveImage(array $imageData, string $image): string
     {
-        $imageHash = \sha1($image);
+        do {
+            $imageHash = StringUtil::getRandomID();
+
+            $path = WCF_DIR . UnfurlUrl::IMAGE_DIR . \substr($imageHash, 0, 2) . '/';
+        } while (!empty(glob($path . $imageHash . '.*')));
 
-        $path = WCF_DIR . UnfurlUrl::IMAGE_DIR . \substr($imageHash, 0, 2);
         FileUtil::makePath($path);
 
         $extension = $this->getImageExtension($imageData);
 
-        $fileLocation = $path . '/' . $imageHash . '.' . $extension;
+        $fileLocation = $path . $imageHash . '.' . $extension;
 
         \file_put_contents($fileLocation, $image);