From 7b1b3fe8cf6a7a1db05cde7a55bb84da12305ceb Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 5 Dec 2023 05:24:33 +0000 Subject: [PATCH] Fix exception, when a provided URI is invalid --- src/Content/Post/Factory/PostMedia.php | 13 +++++++------ src/Util/Network.php | 21 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/Content/Post/Factory/PostMedia.php b/src/Content/Post/Factory/PostMedia.php index fe71b21973..38c5f28ebf 100644 --- a/src/Content/Post/Factory/PostMedia.php +++ b/src/Content/Post/Factory/PostMedia.php @@ -25,6 +25,7 @@ use Friendica\BaseFactory; use Friendica\Capabilities\ICanCreateFromTableRow; use Friendica\Content\Post\Entity; use Friendica\Network; +use Friendica\Util\Network as UtilNetwork; use GuzzleHttp\Psr7\Uri; use Psr\Log\LoggerInterface; use stdClass; @@ -48,24 +49,24 @@ class PostMedia extends BaseFactory implements ICanCreateFromTableRow { return new Entity\PostMedia( $row['uri-id'], - $row['url'] ? new Uri($row['url']) : null, + UtilNetwork::isValidUri($row['url']) ? new Uri($row['url']) : '', $row['type'], $this->mimeTypeFactory->createFromContentType($row['mimetype']), $row['media-uri-id'], $row['width'], $row['height'], $row['size'], - $row['preview'] ? new Uri($row['preview']) : null, + UtilNetwork::isValidUri($row['preview']) ? new Uri($row['preview']) : null, $row['preview-width'], $row['preview-height'], $row['description'], $row['name'], - $row['author-url'] ? new Uri($row['author-url']) : null, + UtilNetwork::isValidUri($row['author-url']) ? new Uri($row['author-url']) : null, $row['author-name'], - $row['author-image'] ? new Uri($row['author-image']) : null, - $row['publisher-url'] ? new Uri($row['publisher-url']) : null, + UtilNetwork::isValidUri($row['author-image']) ? new Uri($row['author-image']) : null, + UtilNetwork::isValidUri($row['publisher-url']) ? new Uri($row['publisher-url']) : null, $row['publisher-name'], - $row['publisher-image'] ? new Uri($row['publisher-image']) : null, + UtilNetwork::isValidUri($row['publisher-image']) ? new Uri($row['publisher-image']) : null, $row['blurhash'], $row['id'] ); diff --git a/src/Util/Network.php b/src/Util/Network.php index 495510189f..e18173c72c 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -658,4 +658,25 @@ class Network $scheme = parse_url($url, PHP_URL_SCHEME); return !empty($scheme) && in_array($scheme, ['http', 'https']) && parse_url($url, PHP_URL_HOST); } + + /** + * Check if a provided URI is valid + * + * @param string|null $uri + * @return boolean + */ + public static function isValidUri(string $uri = null): bool + { + if (empty($uri)) { + return false; + } + + try { + new Uri($uri); + } catch (\Exception $e) { + Logger::debug('Invalid URI', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'uri' => $uri]); + return false; + } + return true; + } } -- 2.39.5