From 3271f73e6ab7ef85519eb88d58ed914b655cd909 Mon Sep 17 00:00:00 2001 From: Ron Lucke <lucke@elan-ev.de> Date: Tue, 23 Jul 2024 05:38:23 +0000 Subject: [PATCH] Fix PHP 8 Warning Issues Closes #4395 and #4408 Merge request studip/studip!3215 --- lib/filesystem/FileManager.php | 10 +++---- lib/models/Courseware/BlockTypes/Embed.php | 32 +++++++++++++--------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/filesystem/FileManager.php b/lib/filesystem/FileManager.php index 13527a9004b..aafbece0aaa 100644 --- a/lib/filesystem/FileManager.php +++ b/lib/filesystem/FileManager.php @@ -1484,7 +1484,7 @@ class FileManager $url_parts = @parse_url($url); // filter out localhost and reserved or private IPs - if (mb_stripos($url_parts['host'], 'localhost') !== false + if (array_key_exists('host', $url_parts) && (mb_stripos($url_parts['host'], 'localhost') !== false || mb_stripos($url_parts['host'], 'loopback') !== false || (filter_var($url_parts['host'], FILTER_VALIDATE_IP) !== false && (mb_strpos($url_parts['host'], '127') === 0 @@ -1495,13 +1495,13 @@ class FileManager | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) === false) - ) + )) ) { return ['response' => 'HTTP/1.0 400 Bad Request', 'response_code' => 400]; } // URL links to an ftp server - if ($url_parts['scheme'] === 'ftp') { + if (array_key_exists('scheme', $url_parts) && $url_parts['scheme'] === 'ftp') { if (preg_match('/[^a-z0-9_.-]/i', $url_parts['host'])) { // exists umlauts ? $IDN = new Algo26\IdnaConvert\ToIdn(); $out = $IDN->convert($url_parts['host']); // false by error @@ -1545,9 +1545,9 @@ class FileManager if (!empty($url_parts['query'])) { $documentpath .= '?' . $url_parts['query']; } - $host = $url_parts['host']; + $host = $url_parts['host'] ?? null; $port = $url_parts['port'] ?? null; - $scheme = mb_strtolower($url_parts['scheme']); + $scheme = array_key_exists('scheme',$url_parts) ? mb_strtolower($url_parts['scheme']) : null; if (!in_array($scheme, ['http', 'https']) || !$host) { return ['response' => 'HTTP/1.0 400 Bad Request', 'response_code' => 400]; } diff --git a/lib/models/Courseware/BlockTypes/Embed.php b/lib/models/Courseware/BlockTypes/Embed.php index 1b366241225..69e0fe900ca 100644 --- a/lib/models/Courseware/BlockTypes/Embed.php +++ b/lib/models/Courseware/BlockTypes/Embed.php @@ -49,20 +49,26 @@ class Embed extends BlockType $payload = $this->decodePayloadString($this->block['payload']); $oembedRequest = $this->buildOembedRequest($payload['source'], $payload['url']); - $payload['oembed_request'] = $oembedRequest; + + $payload['oembed-request'] = $oembedRequest; $payload['oembed-unauthorized'] = false; - $payload['oembed-not-found'] = false; - $payload['oembed'] = ''; - $payload['request'] = ''; - $request = \FileManager::fetchURLMetadata($oembedRequest); - if ($request['response_code'] === 200) { - $payload['request'] = file_get_contents($oembedRequest, false, get_default_http_stream_context($oembedRequest)); - $payload['oembed'] = json_decode($payload['request']); - } elseif ($request['response_code'] === 401) { - $payload['oembed_unauthorized'] = true; - } else { - $payload['oembed_not_found'] = true; + $payload['oembed-not-found'] = true; + $payload['oembed'] = null; + $payload['request'] = null; + + if ($oembedRequest) { + $request = \FileManager::fetchURLMetadata($oembedRequest); + if ($request['response_code'] === 200) { + $payload['request'] = file_get_contents($oembedRequest, false, get_default_http_stream_context($oembedRequest)); + $payload['oembed'] = json_decode($payload['request']); + $payload['oembed-not-found'] = false; + } + if ($request['response_code'] === 401) { + $payload['oembed-unauthorized'] = true; + $payload['oembed-not-found'] = false; + } } + return $payload; } @@ -89,7 +95,7 @@ class Embed extends BlockType 'youtube' => 'https://www.youtube.com/oembed', ]; - return $endPoints[$source].'?url='.rawurlencode($url).'&format=json'; + return array_key_exists($source, $endPoints) ? $endPoints[$source].'?url='.rawurlencode($url).'&format=json' : null; } public static function getCategories(): array -- GitLab