Fix exception, when a provided URI is invalid

This commit is contained in:
Michael 2023-12-05 05:24:33 +00:00
parent 49819b64db
commit 7b1b3fe8cf
2 changed files with 28 additions and 6 deletions

View File

@ -25,6 +25,7 @@ use Friendica\BaseFactory;
use Friendica\Capabilities\ICanCreateFromTableRow; use Friendica\Capabilities\ICanCreateFromTableRow;
use Friendica\Content\Post\Entity; use Friendica\Content\Post\Entity;
use Friendica\Network; use Friendica\Network;
use Friendica\Util\Network as UtilNetwork;
use GuzzleHttp\Psr7\Uri; use GuzzleHttp\Psr7\Uri;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
use stdClass; use stdClass;
@ -48,24 +49,24 @@ class PostMedia extends BaseFactory implements ICanCreateFromTableRow
{ {
return new Entity\PostMedia( return new Entity\PostMedia(
$row['uri-id'], $row['uri-id'],
$row['url'] ? new Uri($row['url']) : null, UtilNetwork::isValidUri($row['url']) ? new Uri($row['url']) : '',
$row['type'], $row['type'],
$this->mimeTypeFactory->createFromContentType($row['mimetype']), $this->mimeTypeFactory->createFromContentType($row['mimetype']),
$row['media-uri-id'], $row['media-uri-id'],
$row['width'], $row['width'],
$row['height'], $row['height'],
$row['size'], $row['size'],
$row['preview'] ? new Uri($row['preview']) : null, UtilNetwork::isValidUri($row['preview']) ? new Uri($row['preview']) : null,
$row['preview-width'], $row['preview-width'],
$row['preview-height'], $row['preview-height'],
$row['description'], $row['description'],
$row['name'], $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-name'],
$row['author-image'] ? new Uri($row['author-image']) : null, UtilNetwork::isValidUri($row['author-image']) ? new Uri($row['author-image']) : null,
$row['publisher-url'] ? new Uri($row['publisher-url']) : null, UtilNetwork::isValidUri($row['publisher-url']) ? new Uri($row['publisher-url']) : null,
$row['publisher-name'], $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['blurhash'],
$row['id'] $row['id']
); );

View File

@ -658,4 +658,25 @@ class Network
$scheme = parse_url($url, PHP_URL_SCHEME); $scheme = parse_url($url, PHP_URL_SCHEME);
return !empty($scheme) && in_array($scheme, ['http', 'https']) && parse_url($url, PHP_URL_HOST); 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;
}
} }