]> git.mxchange.org Git - friendica.git/commitdiff
Fix unsupported animated webp parsing
authorPhilipp <admin@philipp.info>
Sat, 21 May 2022 16:44:03 +0000 (18:44 +0200)
committerPhilipp <admin@philipp.info>
Sat, 21 May 2022 16:44:03 +0000 (18:44 +0200)
src/Object/Image.php

index 5cef75180bdb2949f4fac96c903a07bb81d28342..2d62aea46c03815b36ad3757eaec56a5d84e071e 100644 (file)
@@ -159,15 +159,24 @@ class Image
                }
 
                $this->valid = false;
-               $this->image = @imagecreatefromstring($data);
-               if ($this->image !== false) {
-                       $this->width  = imagesx($this->image);
-                       $this->height = imagesy($this->image);
-                       $this->valid  = true;
-                       imagealphablending($this->image, false);
-                       imagesavealpha($this->image, true);
-
-                       return true;
+               try {
+                       $this->image = @imagecreatefromstring($data);
+                       if ($this->image !== false) {
+                               $this->width  = imagesx($this->image);
+                               $this->height = imagesy($this->image);
+                               $this->valid  = true;
+                               imagealphablending($this->image, false);
+                               imagesavealpha($this->image, true);
+
+                               return true;
+                       }
+               } catch (\Throwable $error) {
+                       /** @see https://github.com/php/doc-en/commit/d09a881a8e9059d11e756ee59d75bf404d6941ed */
+                       if (strstr($error->getMessage(), "gd-webp cannot allocate temporary buffer")) {
+                               DI::logger()->notice('Image is probably a kind of unsupported, animated GID', ['error' => $error]);
+                       } else {
+                               DI::logger()->warning('Unexpected throwable.', ['error' => $error]);
+                       }
                }
 
                return false;