Merge pull request #10069 from annando/notice-fatal
authorHypolite Petovan <hypolite@mrpetovan.com>
Wed, 24 Mar 2021 03:51:45 +0000 (23:51 -0400)
committerGitHub <noreply@github.com>
Wed, 24 Mar 2021 03:51:45 +0000 (23:51 -0400)
Avoid fatal errors and notices

src/Object/Image.php
src/Util/ParseUrl.php

index d69b01a..c1da711 100644 (file)
@@ -541,7 +541,12 @@ class Image
                        do {
                                // FIXME - implement horizontal bias for scaling as in following GD functions
                                // to allow very tall images to be constrained only horizontally.
-                               $this->image->scaleImage($dest_width, $dest_height);
+                               try {
+                                       $this->image->scaleImage($dest_width, $dest_height);
+                               } catch (Exception $e) {
+                                       // Imagick couldn't use the data
+                                       return false;
+                               }
                        } while ($this->image->nextImage());
 
                        // These may not be necessary anymore
index d2986a3..1810293 100644 (file)
@@ -512,19 +512,20 @@ class ParseUrl
        {
                if (!empty($siteinfo['images'])) {
                        array_walk($siteinfo['images'], function (&$image) use ($page_url) {
+                               $image = [];
                                // According to the specifications someone could place a picture url into the content field as well.
                                // But this doesn't seem to happen in the wild, so we don't cover it here.
-                               $image['url'] = self::completeUrl($image['url'], $page_url);
-                               $photodata = Images::getInfoFromURLCached($image['url']);
-                               if (!empty($photodata) && ($photodata[0] > 50) && ($photodata[1] > 50)) {
-                                       $image['src'] = $image['url'];
-                                       $image['width'] = $photodata[0];
-                                       $image['height'] = $photodata[1];
-                                       $image['contenttype'] = $photodata['mime'];
-                                       unset($image['url']);
-                                       ksort($image);
-                               } else {
-                                       $image = [];
+                               if (!empty($image['url'])) {
+                                       $image['url'] = self::completeUrl($image['url'], $page_url);
+                                       $photodata = Images::getInfoFromURLCached($image['url']);
+                                       if (!empty($photodata) && ($photodata[0] > 50) && ($photodata[1] > 50)) {
+                                               $image['src'] = $image['url'];
+                                               $image['width'] = $photodata[0];
+                                               $image['height'] = $photodata[1];
+                                               $image['contenttype'] = $photodata['mime'];
+                                               unset($image['url']);
+                                               ksort($image);
+                                       }
                                }
                        });
 
@@ -542,7 +543,7 @@ class ParseUrl
                                                if (!empty($media[$field])) {
                                                        $media[$field] = self::completeUrl($media[$field], $page_url);
                                                        $type = self::getContentType($media[$field]);
-                                                       if ($type[0] == 'text') {
+                                                       if (($type[0] ?? '') == 'text') {
                                                                if ($field == 'embed') {
                                                                        $embed = $media[$field];
                                                                } else {
@@ -685,7 +686,9 @@ class ParseUrl
        {
                if (!empty($jsonld['@graph']) && is_array($jsonld['@graph'])) {
                        foreach ($jsonld['@graph'] as $part) {
-                               $siteinfo = self::parseParts($siteinfo, $part);
+                               if (!empty($part)) {
+                                       $siteinfo = self::parseParts($siteinfo, $part);
+                               }
                        }
                } elseif (!empty($jsonld['@type'])) {
                        $siteinfo = self::parseJsonLd($siteinfo, $jsonld);
@@ -699,7 +702,9 @@ class ParseUrl
                        }
                        if ($numeric_keys) {
                                foreach ($jsonld as $part) {
-                                       $siteinfo = self::parseParts($siteinfo, $part);
+                                       if (!empty($part)) {
+                                               $siteinfo = self::parseParts($siteinfo, $part);
+                                       }
                                }
                        }
                }