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..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.3']
+ php-versions: ['8.1']
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/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' }}
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);
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);
}
}
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);
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);
}