aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Installer.php
diff options
context:
space:
mode:
authorCôme Chilliet <come.chilliet@nextcloud.com>2024-04-22 16:55:42 +0200
committerCôme Chilliet <come.chilliet@nextcloud.com>2024-04-22 16:55:42 +0200
commit5d1ca7e25aee8264b3dff79eed10eba0568ce82f (patch)
tree648ff723576601c01bf99782e8b5c21a1ac95265 /lib/private/Installer.php
parent37c89f41918b316c8ba2961a6c7e8ab417161ba9 (diff)
downloadnextcloud-server-5d1ca7e25aee8264b3dff79eed10eba0568ce82f.tar.gz
nextcloud-server-5d1ca7e25aee8264b3dff79eed10eba0568ce82f.zip
fix: Drop workarounds for unsupported obsolete PHP versions
Also improved error handling in Installer.php to be type safe. Signed-off-by: Côme Chilliet <come.chilliet@nextcloud.com>
Diffstat (limited to 'lib/private/Installer.php')
-rw-r--r--lib/private/Installer.php29
1 files changed, 19 insertions, 10 deletions
diff --git a/lib/private/Installer.php b/lib/private/Installer.php
index c4af480d4ca..c4df7768d9e 100644
--- a/lib/private/Installer.php
+++ b/lib/private/Installer.php
@@ -281,10 +281,6 @@ class Installer {
// Check if the signature actually matches the downloaded content
$certificate = openssl_get_publickey($app['certificate']);
$verified = (bool)openssl_verify(file_get_contents($tempFile), base64_decode($app['releases'][0]['signature']), $certificate, OPENSSL_ALGO_SHA512);
- // PHP 8+ deprecates openssl_free_key and automatically destroys the key instance when it goes out of scope
- if ((PHP_VERSION_ID < 80000)) {
- openssl_free_key($certificate);
- }
if ($verified === true) {
// Seems to match, let's proceed
@@ -305,6 +301,15 @@ class Installer {
$folders = array_diff($allFiles, ['.', '..']);
$folders = array_values($folders);
+ if (count($folders) < 1) {
+ throw new \Exception(
+ sprintf(
+ 'Extracted app %s has no folders',
+ $appId
+ )
+ );
+ }
+
if (count($folders) > 1) {
throw new \Exception(
sprintf(
@@ -315,13 +320,17 @@ class Installer {
}
// Check if appinfo/info.xml has the same app ID as well
- if ((PHP_VERSION_ID < 80000)) {
- $loadEntities = libxml_disable_entity_loader(false);
- $xml = simplexml_load_string(file_get_contents($extractDir . '/' . $folders[0] . '/appinfo/info.xml'));
- libxml_disable_entity_loader($loadEntities);
- } else {
- $xml = simplexml_load_string(file_get_contents($extractDir . '/' . $folders[0] . '/appinfo/info.xml'));
+ $xml = simplexml_load_string(file_get_contents($extractDir . '/' . $folders[0] . '/appinfo/info.xml'));
+
+ if ($xml === false) {
+ throw new \Exception(
+ sprintf(
+ 'Failed to load info.xml for app id %s',
+ $appId,
+ )
+ );
}
+
if ((string)$xml->id !== $appId) {
throw new \Exception(
sprintf(