From dcddfc672a4859a1b30698bf0415bacf866b6db9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 8 Nov 2024 10:14:56 +0100 Subject: [PATCH 1/6] feat(PHP): Allow PHP 8.4 Signed-off-by: Joas Schilling --- lib/versioncheck.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/versioncheck.php b/lib/versioncheck.php index 43539468e3b61..9e33f584a9abe 100644 --- a/lib/versioncheck.php +++ b/lib/versioncheck.php @@ -13,10 +13,10 @@ exit(1); } -// Show warning if >= PHP 8.4 is used as Nextcloud is not compatible with >= PHP 8.4 for now -if (PHP_VERSION_ID >= 80400) { +// Show warning if >= PHP 8.5 is used as Nextcloud is not compatible with >= PHP 8.5 for now +if (PHP_VERSION_ID >= 80500) { http_response_code(500); - echo 'This version of Nextcloud is not compatible with PHP>=8.4.
'; + echo 'This version of Nextcloud is not compatible with PHP>=8.5.
'; echo 'You are currently running ' . PHP_VERSION . '.'; exit(1); } From da4fe3d5b7e8599fba696f0e9d531c9474faa6c0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 8 Nov 2024 10:15:44 +0100 Subject: [PATCH 2/6] ci: Test on PHP 8.4 Signed-off-by: Joas Schilling --- .github/workflows/files-external-ftp.yml | 2 +- .github/workflows/files-external-s3.yml | 2 +- .github/workflows/files-external-sftp.yml | 2 +- .github/workflows/files-external-smb.yml | 2 +- .github/workflows/files-external-webdav.yml | 2 +- .github/workflows/files-external.yml | 2 +- .github/workflows/lint-php.yml | 2 +- .github/workflows/object-storage-azure.yml | 2 +- .github/workflows/object-storage-s3.yml | 2 +- .github/workflows/object-storage-swift.yml | 2 +- .github/workflows/phpunit-mariadb.yml | 2 ++ .github/workflows/phpunit-memcached.yml | 2 +- .github/workflows/phpunit-mysql.yml | 2 ++ .github/workflows/phpunit-nodb.yml | 2 +- .github/workflows/phpunit-oci.yml | 2 ++ .github/workflows/phpunit-pgsql.yml | 2 ++ .github/workflows/phpunit-sqlite.yml | 2 +- 17 files changed, 21 insertions(+), 13 deletions(-) diff --git a/.github/workflows/files-external-ftp.yml b/.github/workflows/files-external-ftp.yml index 20629605ad631..2dfa5d7dec5a2 100644 --- a/.github/workflows/files-external-ftp.yml +++ b/.github/workflows/files-external-ftp.yml @@ -43,7 +43,7 @@ jobs: # do not stop on another job's failure fail-fast: false matrix: - php-versions: ['8.1', '8.3'] + php-versions: ['8.1', '8.4'] ftpd: ['proftpd', 'vsftpd', 'pure-ftpd'] include: - php-versions: '8.1' diff --git a/.github/workflows/files-external-s3.yml b/.github/workflows/files-external-s3.yml index 87198c6b91cd7..738bf115c8d51 100644 --- a/.github/workflows/files-external-s3.yml +++ b/.github/workflows/files-external-s3.yml @@ -41,7 +41,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2', '8.3'] + php-versions: ['8.1', '8.2', '8.3', '8.4'] include: - php-versions: '8.2' coverage: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/files-external-sftp.yml b/.github/workflows/files-external-sftp.yml index 4a63f0733035d..59607a0806fac 100644 --- a/.github/workflows/files-external-sftp.yml +++ b/.github/workflows/files-external-sftp.yml @@ -43,7 +43,7 @@ jobs: # do not stop on another job's failure fail-fast: false matrix: - php-versions: ['8.1', '8.3'] + php-versions: ['8.1', '8.4'] sftpd: ['openssh'] include: - php-versions: '8.1' diff --git a/.github/workflows/files-external-smb.yml b/.github/workflows/files-external-smb.yml index d555a86d92678..60fee494770b5 100644 --- a/.github/workflows/files-external-smb.yml +++ b/.github/workflows/files-external-smb.yml @@ -41,7 +41,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.3'] + php-versions: ['8.1', '8.4'] include: - php-versions: '8.1' coverage: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/files-external-webdav.yml b/.github/workflows/files-external-webdav.yml index 0dc353d01d8e1..f48e8a01f92b2 100644 --- a/.github/workflows/files-external-webdav.yml +++ b/.github/workflows/files-external-webdav.yml @@ -41,7 +41,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2', '8.3'] + php-versions: ['8.1', '8.2', '8.3', '8.4'] include: - php-versions: '8.2' coverage: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/files-external.yml b/.github/workflows/files-external.yml index 1079f611c44e6..f8c7c2067e5ce 100644 --- a/.github/workflows/files-external.yml +++ b/.github/workflows/files-external.yml @@ -40,7 +40,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2', '8.3'] + php-versions: ['8.1', '8.2', '8.3', '8.4'] include: - php-versions: '8.2' coverage: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/lint-php.yml b/.github/workflows/lint-php.yml index f04b68f89a3e1..47a733a1ae47c 100644 --- a/.github/workflows/lint-php.yml +++ b/.github/workflows/lint-php.yml @@ -47,7 +47,7 @@ jobs: strategy: matrix: - php-versions: [ '8.1', '8.2', '8.3' ] + php-versions: [ '8.1', '8.2', '8.3', '8.4' ] name: php-lint diff --git a/.github/workflows/object-storage-azure.yml b/.github/workflows/object-storage-azure.yml index 8a94a1818908f..ce5b489045513 100644 --- a/.github/workflows/object-storage-azure.yml +++ b/.github/workflows/object-storage-azure.yml @@ -45,7 +45,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2'] + php-versions: ['8.1', '8.2', '8.4'] include: - php-versions: '8.3' coverage: true diff --git a/.github/workflows/object-storage-s3.yml b/.github/workflows/object-storage-s3.yml index 468bcf876e228..f85d884066067 100644 --- a/.github/workflows/object-storage-s3.yml +++ b/.github/workflows/object-storage-s3.yml @@ -45,7 +45,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2'] + php-versions: ['8.1', '8.2', '8.4'] include: - php-versions: '8.3' coverage: true diff --git a/.github/workflows/object-storage-swift.yml b/.github/workflows/object-storage-swift.yml index 2f4fa88c7e573..360d065abc8a8 100644 --- a/.github/workflows/object-storage-swift.yml +++ b/.github/workflows/object-storage-swift.yml @@ -45,7 +45,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2'] + php-versions: ['8.1', '8.2', '8.4'] include: - php-versions: '8.3' coverage: true diff --git a/.github/workflows/phpunit-mariadb.yml b/.github/workflows/phpunit-mariadb.yml index d3643b8a571b6..66326619cd559 100644 --- a/.github/workflows/phpunit-mariadb.yml +++ b/.github/workflows/phpunit-mariadb.yml @@ -61,6 +61,8 @@ jobs: - php-versions: '8.3' mariadb-versions: '10.11' coverage: ${{ github.event_name != 'pull_request' }} + - php-versions: '8.4' + mariadb-versions: '11.4' name: MariaDB ${{ matrix.mariadb-versions }} (PHP ${{ matrix.php-versions }}) - database tests diff --git a/.github/workflows/phpunit-memcached.yml b/.github/workflows/phpunit-memcached.yml index 52ea3d16fd334..8e2f963c2ae1d 100644 --- a/.github/workflows/phpunit-memcached.yml +++ b/.github/workflows/phpunit-memcached.yml @@ -55,7 +55,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.3'] + php-versions: ['8.1', '8.3', '8.4'] include: - php-versions: '8.2' coverage: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/phpunit-mysql.yml b/.github/workflows/phpunit-mysql.yml index 198dd55c5dfa2..fc1da488ee4a9 100644 --- a/.github/workflows/phpunit-mysql.yml +++ b/.github/workflows/phpunit-mysql.yml @@ -61,6 +61,8 @@ jobs: - mysql-versions: '8.0' php-versions: '8.3' coverage: ${{ github.event_name != 'pull_request' }} + - mysql-versions: '8.4' + php-versions: '8.4' name: MySQL ${{ matrix.mysql-versions }} (PHP ${{ matrix.php-versions }}) - database tests diff --git a/.github/workflows/phpunit-nodb.yml b/.github/workflows/phpunit-nodb.yml index e0b0a2088b855..5d8e0797ba22a 100644 --- a/.github/workflows/phpunit-nodb.yml +++ b/.github/workflows/phpunit-nodb.yml @@ -57,7 +57,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.3'] + php-versions: ['8.1', '8.3', '8.4'] include: - php-versions: '8.2' coverage: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/phpunit-oci.yml b/.github/workflows/phpunit-oci.yml index a71017fce6525..0e098898fdfe5 100644 --- a/.github/workflows/phpunit-oci.yml +++ b/.github/workflows/phpunit-oci.yml @@ -66,6 +66,8 @@ jobs: php-versions: '8.2' - oracle-versions: '23' php-versions: '8.3' + - oracle-versions: '23' + php-versions: '8.4' name: Oracle ${{ matrix.oracle-versions }} (PHP ${{ matrix.php-versions }}) - database tests diff --git a/.github/workflows/phpunit-pgsql.yml b/.github/workflows/phpunit-pgsql.yml index 2e3496420b543..118a09a93ccc6 100644 --- a/.github/workflows/phpunit-pgsql.yml +++ b/.github/workflows/phpunit-pgsql.yml @@ -62,6 +62,8 @@ jobs: - php-versions: '8.3' postgres-versions: '16' coverage: ${{ github.event_name != 'pull_request' }} + - php-versions: '8.4' + postgres-versions: '16' name: PostgreSQL ${{ matrix.postgres-versions }} (PHP ${{ matrix.php-versions }}) - database tests diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml index 12b73e5d8c129..a572dd1593bd0 100644 --- a/.github/workflows/phpunit-sqlite.yml +++ b/.github/workflows/phpunit-sqlite.yml @@ -55,7 +55,7 @@ jobs: strategy: matrix: - php-versions: ['8.2', '8.3'] + php-versions: ['8.2', '8.3', '8.4'] include: - php-versions: '8.1' coverage: ${{ github.event_name != 'pull_request' }} From 8952a4cb77c94af3c707c873a0252e5e6cd2ef15 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 8 Nov 2024 11:48:22 +0100 Subject: [PATCH 3/6] fix(logger): Fix closure detection when filtering sensitive parameters Signed-off-by: Joas Schilling --- lib/private/Log/ExceptionSerializer.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/private/Log/ExceptionSerializer.php b/lib/private/Log/ExceptionSerializer.php index 904107f6998fb..6d94bf51f4581 100644 --- a/lib/private/Log/ExceptionSerializer.php +++ b/lib/private/Log/ExceptionSerializer.php @@ -34,6 +34,7 @@ class ExceptionSerializer { 'validateUserPass', 'loginWithToken', '{closure}', + '{closure:*', 'createSessionToken', // Provisioning @@ -200,7 +201,9 @@ private function filterTrace(array $trace) { return $this->editTrace($sensitiveValues, $traceLine); } foreach (self::methodsWithSensitiveParameters as $sensitiveMethod) { - if (str_contains($traceLine['function'], $sensitiveMethod)) { + if (str_contains($traceLine['function'], $sensitiveMethod) + || (str_ends_with($sensitiveMethod, '*') + && str_starts_with($traceLine['function'], substr($sensitiveMethod, 0, -1)))) { return $this->editTrace($sensitiveValues, $traceLine); } } From 34592df1861e33ddcca0c6e2e107cef6d4631c85 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 8 Nov 2024 11:48:55 +0100 Subject: [PATCH 4/6] fix(util): Correctly create Reflection of method for PHP 8.3+ Signed-off-by: Joas Schilling --- lib/private/legacy/OC_Util.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/private/legacy/OC_Util.php b/lib/private/legacy/OC_Util.php index 7b41f797e322a..f82082d3d129f 100644 --- a/lib/private/legacy/OC_Util.php +++ b/lib/private/legacy/OC_Util.php @@ -878,7 +878,12 @@ public static function isSetLocaleWorking() { * @return bool */ public static function isAnnotationsWorking() { - $reflection = new \ReflectionMethod(__METHOD__); + if (PHP_VERSION_ID >= 80300) { + /** @psalm-suppress UndefinedMethod */ + $reflection = \ReflectionMethod::createFromMethodName(__METHOD__); + } else { + $reflection = new \ReflectionMethod(__METHOD__); + } $docs = $reflection->getDocComment(); return (is_string($docs) && strlen($docs) > 50); From 73de40719e6c6f4e100df7d42f402f00f3e71403 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 8 Nov 2024 12:44:20 +0100 Subject: [PATCH 5/6] ci: Don't test incompatible external storages on PHP 8.4 Signed-off-by: Joas Schilling --- .github/workflows/files-external-smb.yml | 2 +- .github/workflows/object-storage-azure.yml | 2 +- .github/workflows/object-storage-s3.yml | 2 +- .github/workflows/object-storage-swift.yml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/files-external-smb.yml b/.github/workflows/files-external-smb.yml index 60fee494770b5..e2ffccadf7c31 100644 --- a/.github/workflows/files-external-smb.yml +++ b/.github/workflows/files-external-smb.yml @@ -41,7 +41,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.4'] + php-versions: ['8.1'] include: - php-versions: '8.1' coverage: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/object-storage-azure.yml b/.github/workflows/object-storage-azure.yml index ce5b489045513..8a94a1818908f 100644 --- a/.github/workflows/object-storage-azure.yml +++ b/.github/workflows/object-storage-azure.yml @@ -45,7 +45,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2', '8.4'] + php-versions: ['8.1', '8.2'] include: - php-versions: '8.3' coverage: true diff --git a/.github/workflows/object-storage-s3.yml b/.github/workflows/object-storage-s3.yml index f85d884066067..468bcf876e228 100644 --- a/.github/workflows/object-storage-s3.yml +++ b/.github/workflows/object-storage-s3.yml @@ -45,7 +45,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2', '8.4'] + php-versions: ['8.1', '8.2'] include: - php-versions: '8.3' coverage: true diff --git a/.github/workflows/object-storage-swift.yml b/.github/workflows/object-storage-swift.yml index 360d065abc8a8..2f4fa88c7e573 100644 --- a/.github/workflows/object-storage-swift.yml +++ b/.github/workflows/object-storage-swift.yml @@ -45,7 +45,7 @@ jobs: strategy: matrix: - php-versions: ['8.1', '8.2', '8.4'] + php-versions: ['8.1', '8.2'] include: - php-versions: '8.3' coverage: true From 298948c28ce2d01446e718f6cf96e8fe0a444c6c Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 8 Nov 2024 12:55:00 +0100 Subject: [PATCH 6/6] ci: Skip currently PHP 8.4 incompatible test Signed-off-by: Joas Schilling --- apps/dav/tests/unit/Files/FileSearchBackendTest.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/dav/tests/unit/Files/FileSearchBackendTest.php b/apps/dav/tests/unit/Files/FileSearchBackendTest.php index f6fe8b1c1160a..aaa3d8c147ee8 100644 --- a/apps/dav/tests/unit/Files/FileSearchBackendTest.php +++ b/apps/dav/tests/unit/Files/FileSearchBackendTest.php @@ -55,6 +55,10 @@ class FileSearchBackendTest extends TestCase { private $davFolder; protected function setUp(): void { + if (PHP_VERSION_ID >= 80400) { + $this->markTestSkipped('SearchDAV is not yet PHP 8.4 compatible'); + } + parent::setUp(); $this->user = $this->createMock(IUser::class);