Merge pull request #14736 from MrPetovan/bug/fatal-errors
Ward against invalid URLs in Model\Post\Media::isFederatedServer
This commit is contained in:
commit
80f5856764
1 changed files with 15 additions and 9 deletions
|
@ -10,6 +10,7 @@ namespace Friendica\Model\Post;
|
||||||
use Friendica\Content\PageInfo;
|
use Friendica\Content\PageInfo;
|
||||||
use Friendica\Content\Text\BBCode;
|
use Friendica\Content\Text\BBCode;
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
|
use Friendica\Core\System;
|
||||||
use Friendica\Database\Database;
|
use Friendica\Database\Database;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
@ -255,6 +256,7 @@ class Media
|
||||||
|
|
||||||
private static function isFederatedServer(string $url): bool
|
private static function isFederatedServer(string $url): bool
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
$baseurl = Network::getBaseUrl(new Uri($url));
|
$baseurl = Network::getBaseUrl(new Uri($url));
|
||||||
if (empty($baseurl)) {
|
if (empty($baseurl)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -265,6 +267,10 @@ class Media
|
||||||
}
|
}
|
||||||
|
|
||||||
return DBA::exists('gserver', ['nurl' => Strings::normaliseLink($baseurl), 'network' => Protocol::FEDERATED]);
|
return DBA::exists('gserver', ['nurl' => Strings::normaliseLink($baseurl), 'network' => Protocol::FEDERATED]);
|
||||||
|
} catch(\Throwable $e) {
|
||||||
|
DI::logger()->notice('Invalid URL provided', ['url' => $url, 'exception' => $e, 'callstack' => System::callstack(10)]);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function addPreviewData(array $media): array
|
private static function addPreviewData(array $media): array
|
||||||
|
@ -790,7 +796,7 @@ class Media
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search for links with descriptions
|
// Search for links with descriptions
|
||||||
if (preg_match_all("/\[url\=(https?:.*?)\].*?\[\/url\]/ism", $body, $matches)) {
|
if (preg_match_all("#\[url=(https?://.+?)].+?\[/url]#ism", $body, $matches)) {
|
||||||
foreach ($matches[1] as $url) {
|
foreach ($matches[1] as $url) {
|
||||||
DI::logger()->info('Got page url (link with description)', ['uri-id' => $uriid, 'url' => $url]);
|
DI::logger()->info('Got page url (link with description)', ['uri-id' => $uriid, 'url' => $url]);
|
||||||
$result = self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url], false);
|
$result = self::insert(['uri-id' => $uriid, 'type' => self::UNKNOWN, 'url' => $url], false);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue