From d6d0f755ff65c5377402b12b6032486c170ce155 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Thu, 11 Sep 2025 20:34:29 +0200 Subject: [PATCH 01/16] [ticket/17540] Use windows 2025 runners and limit to single PHP version PHPBB-17540 --- .github/workflows/tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 72bd7d6d42..79dcc27277 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -495,11 +495,11 @@ jobs: # Test with IIS & PostgreSQL on Windows windows-tests: - runs-on: windows-latest + runs-on: windows-2025 strategy: matrix: type: ['unit', 'functional'] - php: ['8.1', '8.2', '8.3'] + php: ['8.4'] db: ['postgres'] name: Windows - ${{ matrix.type }} - PHP ${{ matrix.php }} - ${{ matrix.db }} From c5758e7ac4875065a8cbe4022e7d08a853904431 Mon Sep 17 00:00:00 2001 From: Matt Friedman Date: Thu, 11 Sep 2025 11:29:41 -0700 Subject: [PATCH 02/16] [ticket/17451] Prevent web push service worker from updating user activity PHPBB-17451 --- phpBB/phpbb/session.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/phpBB/phpbb/session.php b/phpBB/phpbb/session.php index 5a1c2e872f..579040d703 100644 --- a/phpBB/phpbb/session.php +++ b/phpBB/phpbb/session.php @@ -1715,7 +1715,7 @@ class session { global $db; - if (isset($this->data['session_time'], $this->data['user_id'])) + if (isset($this->data['session_time'], $this->data['user_id']) && !$this->is_push_notification_request()) { $sql = 'UPDATE ' . USERS_TABLE . ' SET user_lastvisit = ' . (int) $this->data['session_time'] . ', @@ -1734,7 +1734,7 @@ class session { global $db; - if (isset($this->time_now, $this->data['user_id'])) + if (isset($this->time_now, $this->data['user_id']) && !$this->is_push_notification_request()) { $sql = 'UPDATE ' . USERS_TABLE . ' SET user_last_active = ' . $this->time_now . ' @@ -1742,4 +1742,16 @@ class session $db->sql_query($sql); } } + + /** + * Determine if the request is an Ajax request from the web push service worker + * + * @return bool True if the request is an Ajax request and the page URL contains '/push/notification', otherwise false + */ + protected function is_push_notification_request(): bool + { + global $request; + + return $request->is_ajax() && str_contains($this->page['page'], '/push/notification'); + } } From e482a6e74b14628cb1c4a7ee9adc324dd2fc0a33 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 13 Sep 2025 08:59:19 +0200 Subject: [PATCH 03/16] [ticket/17540] Default initialize rename_index array PHPBB-17540 --- .../db/migration/data/v400/rename_duplicated_index_names.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpBB/phpbb/db/migration/data/v400/rename_duplicated_index_names.php b/phpBB/phpbb/db/migration/data/v400/rename_duplicated_index_names.php index 805d68ff75..f2d8107a9b 100644 --- a/phpBB/phpbb/db/migration/data/v400/rename_duplicated_index_names.php +++ b/phpBB/phpbb/db/migration/data/v400/rename_duplicated_index_names.php @@ -27,7 +27,7 @@ class rename_duplicated_index_names extends migration /** * @var array */ - protected static $rename_index; + protected static $rename_index = []; public static function depends_on() { From 949423abd99b4b522ee4d0454cf4f6688107114b Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 13 Sep 2025 09:57:45 +0200 Subject: [PATCH 04/16] [ticket/17540] Update composer installers to version 2.3.0 PHPBB-17540 --- phpBB/composer.json | 2 +- phpBB/composer.lock | 45 ++++++++++++++++++++------------------------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/phpBB/composer.json b/phpBB/composer.json index 7dfe52b322..8ff7e38d25 100644 --- a/phpBB/composer.json +++ b/phpBB/composer.json @@ -34,7 +34,7 @@ "bantu/ini-get-wrapper": "~1.0", "carlos-mg89/oauth": "^0.8.15", "composer/composer": "^2.0", - "composer/installers": "^1.9", + "composer/installers": "^2.3", "composer/package-versions-deprecated": "^1.11", "doctrine/dbal": "^3.9", "google/recaptcha": "~1.1", diff --git a/phpBB/composer.lock b/phpBB/composer.lock index eed819db81..f9090155f5 100644 --- a/phpBB/composer.lock +++ b/phpBB/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9f600f681e6bb2efaa5a7c6a445e09bf", + "content-hash": "43fe1ef1a33684f75d832b93f7ac764c", "packages": [ { "name": "bantu/ini-get-wrapper", @@ -436,39 +436,37 @@ }, { "name": "composer/installers", - "version": "v1.12.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/composer/installers.git", - "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19" + "reference": "12fb2dfe5e16183de69e784a7b84046c43d97e8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/installers/zipball/d20a64ed3c94748397ff5973488761b22f6d3f19", - "reference": "d20a64ed3c94748397ff5973488761b22f6d3f19", + "url": "https://api.github.com/repos/composer/installers/zipball/12fb2dfe5e16183de69e784a7b84046c43d97e8e", + "reference": "12fb2dfe5e16183de69e784a7b84046c43d97e8e", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0" - }, - "replace": { - "roundcube/plugin-installer": "*", - "shama/baton": "*" + "composer-plugin-api": "^1.0 || ^2.0", + "php": "^7.2 || ^8.0" }, "require-dev": { - "composer/composer": "1.6.* || ^2.0", - "composer/semver": "^1 || ^3", - "phpstan/phpstan": "^0.12.55", - "phpstan/phpstan-phpunit": "^0.12.16", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.3" + "composer/composer": "^1.10.27 || ^2.7", + "composer/semver": "^1.7.2 || ^3.4.0", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-phpunit": "^1", + "symfony/phpunit-bridge": "^7.1.1", + "symfony/process": "^5 || ^6 || ^7" }, "type": "composer-plugin", "extra": { "class": "Composer\\Installers\\Plugin", "branch-alias": { - "dev-main": "1.x-dev" - } + "dev-main": "2.x-dev" + }, + "plugin-modifies-install-path": true }, "autoload": { "psr-4": { @@ -489,7 +487,6 @@ "description": "A multi-framework Composer library installer", "homepage": "https://composer.github.io/installers/", "keywords": [ - "Craft", "Dolibarr", "Eliasis", "Hurad", @@ -510,7 +507,6 @@ "Whmcs", "WolfCMS", "agl", - "aimeos", "annotatecms", "attogram", "bitrix", @@ -519,6 +515,7 @@ "cockpit", "codeigniter", "concrete5", + "concreteCMS", "croogo", "dokuwiki", "drupal", @@ -529,7 +526,6 @@ "grav", "installer", "itop", - "joomla", "known", "kohana", "laravel", @@ -538,6 +534,7 @@ "magento", "majima", "mako", + "matomo", "mediawiki", "miaoxing", "modulework", @@ -557,9 +554,7 @@ "silverstripe", "sydes", "sylius", - "symfony", "tastyigniter", - "typo3", "wordpress", "yawik", "zend", @@ -567,7 +562,7 @@ ], "support": { "issues": "https://github.com/composer/installers/issues", - "source": "https://github.com/composer/installers/tree/v1.12.0" + "source": "https://github.com/composer/installers/tree/v2.3.0" }, "funding": [ { @@ -583,7 +578,7 @@ "type": "tidelift" } ], - "time": "2021-09-13T08:19:44+00:00" + "time": "2024-06-24T20:46:46+00:00" }, { "name": "composer/metadata-minifier", From 07772c910545a3945a3a7179b71aaa73b1141f46 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 13 Sep 2025 20:21:28 +0200 Subject: [PATCH 05/16] [ticket/17540] Use VigLink in extensions ACP test PHPBB-17540 --- tests/functional/extension_acp_test.php | 62 ++++++++----------------- 1 file changed, 20 insertions(+), 42 deletions(-) diff --git a/tests/functional/extension_acp_test.php b/tests/functional/extension_acp_test.php index 30dcaa89c7..8f76a91b95 100644 --- a/tests/functional/extension_acp_test.php +++ b/tests/functional/extension_acp_test.php @@ -300,41 +300,33 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&start=' . $i * 20 . '&mode=catalog&sid=' . $this->sid); } - $extension_filter($crawler, 'Scroll Page', $scrollpage_install_link); - $extension_filter($crawler, 'Scroll To Top', $scrolltotop_install_link); + $extension_filter($crawler, 'VigLink', $viglink_install_link); } - if (!isset($scrolltotop_install_link) || !isset($scrollpage_install_link)) + if (!isset($viglink_install_link)) { $this->fail('Failed acquiring install links for test extensions'); } - // Attempt to install vse/scrollpage extension - $crawler = self::$client->click($scrollpage_install_link); + // Attempt to install phpbb/viglink extension + $crawler = self::$client->click($viglink_install_link); $this->assertContainsLang('EXTENSIONS_INSTALLED', $crawler->filter('.successbox > p')->text()); // Assert there's console log output - $this->assertStringContainsString('Locking vse/scrollpage', $crawler->filter('.console-output > pre')->text()); - - // Attempt to install vse/scrolltotop extension - $crawler = self::$client->click($scrolltotop_install_link); - $this->assertContainsLang('EXTENSIONS_INSTALLED', $crawler->filter('.successbox > p')->text()); - // Assert there's console log output - $this->assertStringContainsString('Locking vse/scrolltotop', $crawler->filter('.console-output > pre')->text()); + $this->assertStringContainsString('Locking phpbb/viglink', $crawler->filter('.console-output > pre')->text()); // Ensure installed extension appears in available extensions list $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid); - $this->assertStringContainsString('Scroll To Top', $crawler->filter('strong[title="vse/scrolltotop"]')->text()); - $this->assertStringContainsString('Scroll Page', $crawler->filter('strong[title="vse/scrollpage"]')->text()); + $this->assertStringContainsString('VigLink', $crawler->filter('strong[title="phpbb/viglink"]')->text()); } public function test_extensions_catalog_updating_extension() { - // Enable 'Scroll Page' extension installed earlier + // Enable 'VigLink' extension installed earlier $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid); $extension_enable_link = $crawler->filter('tr')->reduce( function ($node, $i) { - return (bool) (strpos($node->text(), 'Scroll Page') !== false); + return (bool) (strpos($node->text(), 'VigLink') !== false); } )->selectLink($this->lang('EXTENSION_ENABLE'))->link(); $crawler = self::$client->click($extension_enable_link); @@ -342,22 +334,22 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case $crawler = self::submit($form); $this->assertContainsLang('EXTENSION_ENABLE_SUCCESS', $crawler->filter('.successbox')->text()); - // Update 'Scroll Page' enabled extension + // Update 'VigLink' enabled extension $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid); - $scrollpage_update_link = $crawler->filter('tr')->reduce( + $viglink_update_link = $crawler->filter('tr')->reduce( function ($node, $i) { - return (bool) (strpos($node->text(), 'Scroll Page') !== false); + return (bool) (strpos($node->text(), 'VigLink') !== false); } )->selectLink($this->lang('EXTENSION_UPDATE'))->link(); - $crawler = self::$client->click($scrollpage_update_link); + $crawler = self::$client->click($viglink_update_link); $this->assertContainsLang('EXTENSIONS_UPDATED', $crawler->filter('.successbox > p')->text()); // Assert there's console log output $this->assertStringContainsString('Updating packages', $crawler->filter('.console-output > pre')->text()); // Ensure installed extension still appears in available extensions list $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid); - $this->assertStringContainsString('Scroll Page', $crawler->filter('strong[title="vse/scrollpage"]')->text()); + $this->assertStringContainsString('VigLink', $crawler->filter('strong[title="phpbb/viglink"]')->text()); } public function test_extensions_catalog_removing_extension() @@ -365,36 +357,22 @@ class phpbb_functional_extension_acp_test extends phpbb_functional_test_case $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid); // Check if both enabled and disabled extensions have 'Remove' action available - $scrollpage_remove_link = $crawler->filter('tr')->reduce( + $viglink_remove_link = $crawler->filter('tr')->reduce( function ($node, $i) { - return (bool) (strpos($node->text(), 'Scroll Page') !== false); - } - )->selectLink($this->lang('EXTENSION_REMOVE'))->link(); - - $scrolltotop_remove_link = $crawler->filter('tr')->reduce( - function ($node, $i) - { - return (bool) (strpos($node->text(), 'Scroll To Top') !== false); + return (bool) (strpos($node->text(), 'VigLink') !== false); } )->selectLink($this->lang('EXTENSION_REMOVE'))->link(); // Test extensions removal - // Remove 'Scroll Page' enabled extension - $crawler = self::$client->click($scrollpage_remove_link); + // Remove 'VigLink' enabled extension + $crawler = self::$client->click($viglink_remove_link); $this->assertContainsLang('EXTENSIONS_REMOVED', $crawler->filter('.successbox > p')->text()); // Assert there's console log output - $this->assertStringContainsString('Removing vse/scrollpage', $crawler->filter('.console-output > pre')->text()); - - // Remove 'Scroll To Top' disabled extension - $crawler = self::$client->click($scrolltotop_remove_link); - $this->assertContainsLang('EXTENSIONS_REMOVED', $crawler->filter('.successbox > p')->text()); - // Assert there's console log output - $this->assertStringContainsString('Removing vse/scrolltotop', $crawler->filter('.console-output > pre')->text()); + $this->assertStringContainsString('Removing phpbb/viglink', $crawler->filter('.console-output > pre')->text()); // Ensure removed extensions do not appear in available extensions list - $crawler = self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid); - $this->assertStringNotContainsString('Scroll Page', $this->get_content()); - $this->assertStringNotContainsString('Scroll To Top', $this->get_content()); + self::request('GET', 'adm/index.php?i=acp_extensions&mode=main&sid=' . $this->sid); + $this->assertStringNotContainsString('VigLink', $this->get_content()); } } From 17670ed48f84e66650212233d6925e45e06ebc8f Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 14 Sep 2025 14:12:26 +0200 Subject: [PATCH 06/16] [ticket/17540] Change handling of rename_index array PHPBB-17540 --- .../db/migration/data/v400/rename_duplicated_index_names.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpBB/phpbb/db/migration/data/v400/rename_duplicated_index_names.php b/phpBB/phpbb/db/migration/data/v400/rename_duplicated_index_names.php index f2d8107a9b..3df6feee19 100644 --- a/phpBB/phpbb/db/migration/data/v400/rename_duplicated_index_names.php +++ b/phpBB/phpbb/db/migration/data/v400/rename_duplicated_index_names.php @@ -27,7 +27,7 @@ class rename_duplicated_index_names extends migration /** * @var array */ - protected static $rename_index = []; + protected static $rename_index; public static function depends_on() { @@ -72,7 +72,7 @@ class rename_duplicated_index_names extends migration } return [ - 'rename_index' => self::$rename_index, + 'rename_index' => self::$rename_index ?? [], ]; } From 5b4afdfedc409a38d6dc072b1a8c1f134089799c Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 14 Sep 2025 14:13:28 +0200 Subject: [PATCH 07/16] [ticket/17540] Use standard John Doe token PHPBB-17540 --- tests/functions/fixtures/user_delete.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/functions/fixtures/user_delete.xml b/tests/functions/fixtures/user_delete.xml index 4c4479d29b..65df5616be 100644 --- a/tests/functions/fixtures/user_delete.xml +++ b/tests/functions/fixtures/user_delete.xml @@ -40,7 +40,7 @@ 2 897a897b797c8789997d7979879 auth.provider.oauth.service.google - {"accessToken":"ya29.YPHwCWVkrvwu1kgbYKiDNYaQ451ZuHy9OEQAGVME8if-WBzR-v7a9ftxbx41kaL)5VLEXB-6qJEvri","endOfLife":1429959670,"extraParams":{"token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsImupZCI6IjE0YuRjNzc2MDQwYjUyNDZmNTI5OWFkZDVlMmQ1NWNOPTdjMDdlZTAifQ.eyJpc3MiOiJhY2NvdW90cy5nb78nbGUuY29tIiwic3ViIjoiMTExMDMwNwerNjM4MTM5NTQwMTM1IiwiYXpwIjoiOTk3MzUwMTY0NzE0LWhwOXJrYjZpcjM4MW80YjV1NjRpaGtmM29zMnRvbWxhLmFwcHMuZ29vZ2xldXNlcmNvbnRlbnQuY29tIiwiZW1haWwiOiJtYXJjLmFsZXhhbmRlci4zN0BnbWFpbC5jb20iLCJhdF9oYXNoIjoiWHk2b1JabnVZUWRfRTZDeDV0RkItdyIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJhdWQiOiI5OTczNTAxNjQ3MTQtaHA5cmtiNmlyMzgxbzRiNXU2NGloa2Yzb3MydG9tbGEuYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJpYXQiOjE0Mjk5NTYwNzEsImV4cCI6MTQyOTk1OTY3MX0.C5gfSzjqwlRRvVMuTP6jfWIuEHMXn55oYHsSA3eh97n2BZL0TZHhUm4K206Fgucd6ufAphan4l0J7y6tMAHLZPr-kk6KDINxWnPG-up99reblGutay0lRYjMCcrhJAOql8EI1bi84GyliZFYHL67pE0ZtSf-CMb1CeH18TFe-Fk"},"refreshToken":null,"token_class":"OAuth\\\\OAuth2\\\\Token\\\\StdOAuth2Token"} + {"accessToken":"ya29.YPHwCWVkrvwu1kgbYKiDNYaQ451ZuHy9OEQAGVME8if-WBzR-v7a9ftxbx41kaL)5VLEXB-6qJEvri","endOfLife":1429959670,"extraParams":{"token_type":"Bearer","id_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30"},"refreshToken":null,"token_class":"OAuth\\\\OAuth2\\\\Token\\\\StdOAuth2Token"} From cd40a0594e9fcb009f7dd6dd4873be06b805f58d Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 14 Sep 2025 15:29:12 +0200 Subject: [PATCH 08/16] [ticket/17540] Fix some small warnings PHPBB-17540 --- tests/console/thumbnail_test.php | 20 +++++++++++++++----- tests/lint_test.php | 8 ++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/tests/console/thumbnail_test.php b/tests/console/thumbnail_test.php index aa5e72bb82..68d4651757 100644 --- a/tests/console/thumbnail_test.php +++ b/tests/console/thumbnail_test.php @@ -97,11 +97,21 @@ class phpbb_console_command_thumbnail_test extends phpbb_database_test_case { parent::tearDown(); - unlink($this->phpbb_root_path . 'files/test_png_1'); - unlink($this->phpbb_root_path . 'files/test_png_2'); - unlink($this->phpbb_root_path . 'files/test_txt'); - unlink($this->phpbb_root_path . 'files/thumb_test_png_1'); - unlink($this->phpbb_root_path . 'files/thumb_test_png_2'); + $delete_files = [ + $this->phpbb_root_path . 'files/test_png_1', + $this->phpbb_root_path . 'files/test_png_2', + $this->phpbb_root_path . 'files/test_txt', + $this->phpbb_root_path . 'files/thumb_test_png_1', + $this->phpbb_root_path . 'files/thumb_test_png_2' + ]; + + foreach ($delete_files as $file) + { + if (file_exists($file)) + { + unlink($file); + } + } } public function test_thumbnails() diff --git a/tests/lint_test.php b/tests/lint_test.php index 55fc394170..e7904f9c83 100644 --- a/tests/lint_test.php +++ b/tests/lint_test.php @@ -52,12 +52,12 @@ class lint_test extends phpbb_test_case $this->assertEquals(0, $status, "PHP lint failed for $path:\n$output"); } - public function lint_data() + public static function lint_data(): array { - return $this->check(__DIR__ . '/..'); + return self::check(__DIR__ . '/..'); } - protected function check($root) + protected static function check($root): array { $files = array(); $dh = opendir($root); @@ -92,7 +92,7 @@ class lint_test extends phpbb_test_case __DIR__ . '/../node_modules', ))) { - $files = array_merge($files, $this->check($path)); + $files = array_merge($files, self::check($path)); } else if (substr($filename, strlen($filename)-4) == '.php') { From 1590efe52ef35e4ad71190315208f23b186244cc Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 14 Sep 2025 18:49:17 +0200 Subject: [PATCH 09/16] [ticket/17540] Try tests against PHP 8.5 PHPBB-17540 --- .github/workflows/tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 79dcc27277..4a021cd1b4 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -145,6 +145,10 @@ jobs: db: "mysql:8.0" - php: '8.4' db: "mariadb:10.3" + - php: '8.5' + db: "mysql:8.0" + - php: '8.5' + db: "mariadb:10.3" name: PHP ${{ matrix.php }} - ${{ matrix.db_alias != '' && matrix.db_alias || matrix.db }} @@ -286,6 +290,8 @@ jobs: db: "postgres:9.5" - php: '8.4' db: "postgres:9.5" + - php: '8.5' + db: "postgres:9.5" name: PHP ${{ matrix.php }} - ${{ matrix.db }} From 07d75791be0b5440e83ad4bf9f6b00beac505a77 Mon Sep 17 00:00:00 2001 From: Matt Friedman Date: Mon, 15 Sep 2025 17:49:32 -0700 Subject: [PATCH 10/16] [ticket/17542] Mock event dispatcher override early exits PHPBB-17542 --- tests/mock/event_dispatcher.php | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/tests/mock/event_dispatcher.php b/tests/mock/event_dispatcher.php index fa8b4a1036..654a08d7f1 100644 --- a/tests/mock/event_dispatcher.php +++ b/tests/mock/event_dispatcher.php @@ -22,8 +22,20 @@ class phpbb_mock_event_dispatcher extends \phpbb\event\dispatcher { } - public function trigger_event($eventName, $data = array()) + public function trigger_event($eventName, $data = array()): array { - return array(); + // Ensure tests never hard-exit when phpBB calls exit_handler() + if ($eventName === 'core.exit_handler') + { + // Set the override flag so exit_handler() returns instead of exit; + if (is_array($data)) + { + $data['exit_handler_override'] = true; + } + return (array) $data; + } + + // Default behaviour of the mock: return the input data unchanged + return (array) $data; } } From 5336d51f54077e480fa55712d2beef353e1779cf Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 16 Sep 2025 22:12:22 +0700 Subject: [PATCH 11/16] [ticket/17543] Update composer and dependencies Update composer.phar and dependencies for better support of upcoming PHP 8.5. PHPBB-17543 --- composer.phar | Bin 3114082 -> 3124368 bytes phpBB/composer.lock | 1155 ++++++++++++++++++++++--------------------- 2 files changed, 603 insertions(+), 552 deletions(-) diff --git a/composer.phar b/composer.phar index 7a3bef9dffd8d0fe6e29b47fd521e51891cc0312..ee830d113df2a40cd7fcbd49966711d4aa4276bb 100755 GIT binary patch delta 28500 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.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, { "name": "doctrine/dbal", - "version": "3.9.4", + "version": "3.10.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" + "reference": "c6c16cf787eaba3112203dfcd715fa2059c62282" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/c6c16cf787eaba3112203dfcd715fa2059c62282", + "reference": "c6c16cf787eaba3112203dfcd715fa2059c62282", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", "doctrine/event-manager": "^1|^2", "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, + "conflict": { + "doctrine/cache": "< 1.11" + }, "require-dev": { - "doctrine/coding-standard": "12.0.0", + "doctrine/cache": "^1.11|^2.0", + "doctrine/coding-standard": "13.0.1", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "2.1.1", + "phpstan/phpstan": "2.1.22", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.22", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.2", + "phpunit/phpunit": "9.6.23", + "slevomat/coding-standard": "8.16.2", + "squizlabs/php_codesniffer": "3.13.1", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/console": "^4.4|^5.4|^6.0|^7.0" }, @@ -1214,7 +1108,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.4" + "source": "https://github.com/doctrine/dbal/tree/3.10.2" }, "funding": [ { @@ -1230,7 +1124,7 @@ "type": "tidelift" } ], - "time": "2025-01-16T08:28:55+00:00" + "time": "2025-09-04T23:51:27+00:00" }, { "name": "doctrine/deprecations", @@ -1282,30 +1176,29 @@ }, { "name": "doctrine/event-manager", - "version": "1.2.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/event-manager.git", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520" + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520", - "reference": "95aa4cb529f1e96576f3fda9f5705ada4056a520", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", + "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", "shasum": "" }, "require": { - "doctrine/deprecations": "^0.5.3 || ^1", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "conflict": { "doctrine/common": "<2.9" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.8", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.24" + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^10.5", + "vimeo/psalm": "^5.24" }, "type": "library", "autoload": { @@ -1354,7 +1247,7 @@ ], "support": { "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/1.2.0" + "source": "https://github.com/doctrine/event-manager/tree/2.0.1" }, "funding": [ { @@ -1370,7 +1263,7 @@ "type": "tidelift" } ], - "time": "2022-10-12T20:51:15+00:00" + "time": "2024-05-22T20:47:39+00:00" }, { "name": "doctrine/lexer", @@ -1600,16 +1493,16 @@ }, { "name": "google/recaptcha", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/google/recaptcha.git", - "reference": "d59a801e98a4e9174814a6d71bbc268dff1202df" + "reference": "56522c261d2e8c58ba416c90f81a4cd9f2ed89b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/recaptcha/zipball/d59a801e98a4e9174814a6d71bbc268dff1202df", - "reference": "d59a801e98a4e9174814a6d71bbc268dff1202df", + "url": "https://api.github.com/repos/google/recaptcha/zipball/56522c261d2e8c58ba416c90f81a4cd9f2ed89b9", + "reference": "56522c261d2e8c58ba416c90f81a4cd9f2ed89b9", "shasum": "" }, "require": { @@ -1648,26 +1541,26 @@ "issues": "https://github.com/google/recaptcha/issues", "source": "https://github.com/google/recaptcha" }, - "time": "2023-02-18T17:41:46+00:00" + "time": "2025-06-26T22:21:57+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.9.3", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", - "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1758,7 +1651,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.3" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -1774,20 +1667,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:37:11+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", - "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -1795,7 +1688,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { @@ -1841,7 +1734,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.2.0" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -1857,20 +1750,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T13:27:01+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" + "reference": "21dc724a0583619cd1652f673303492272778051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", - "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051", + "reference": "21dc724a0583619cd1652f673303492272778051", "shasum": "" }, "require": { @@ -1886,7 +1779,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1957,7 +1850,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.1" + "source": "https://github.com/guzzle/psr7/tree/2.8.0" }, "funding": [ { @@ -1973,20 +1866,20 @@ "type": "tidelift" } ], - "time": "2025-03-27T12:30:47+00:00" + "time": "2025-08-23T21:21:41+00:00" }, { "name": "justinrainbow/json-schema", - "version": "6.4.1", + "version": "6.5.2", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "35d262c94959571e8736db1e5c9bc36ab94ae900" + "reference": "ac0d369c09653cf7af561f6d91a705bc617a87b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/35d262c94959571e8736db1e5c9bc36ab94ae900", - "reference": "35d262c94959571e8736db1e5c9bc36ab94ae900", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/ac0d369c09653cf7af561f6d91a705bc617a87b8", + "reference": "ac0d369c09653cf7af561f6d91a705bc617a87b8", "shasum": "" }, "require": { @@ -1996,7 +1889,7 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "3.3.0", - "json-schema/json-schema-test-suite": "1.2.0", + "json-schema/json-schema-test-suite": "^23.2", "marc-mabe/php-enum-phpstan": "^2.0", "phpspec/prophecy": "^1.19", "phpstan/phpstan": "^1.12", @@ -2046,9 +1939,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.4.1" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.5.2" }, - "time": "2025-04-04T13:08:07+00:00" + "time": "2025-09-09T09:42:27+00:00" }, { "name": "laminas/laminas-code", @@ -2115,16 +2008,16 @@ }, { "name": "marc-mabe/php-enum", - "version": "v4.7.1", + "version": "v4.7.2", "source": { "type": "git", "url": "https://github.com/marc-mabe/php-enum.git", - "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed" + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/7159809e5cfa041dca28e61f7f7ae58063aae8ed", - "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef", + "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef", "shasum": "" }, "require": { @@ -2182,9 +2075,9 @@ ], "support": { "issues": "https://github.com/marc-mabe/php-enum/issues", - "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.1" + "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2" }, - "time": "2024-11-28T04:54:44+00:00" + "time": "2025-09-14T11:18:39+00:00" }, { "name": "marc1706/fast-image-size", @@ -2927,23 +2820,23 @@ }, { "name": "react/promise", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", "shasum": "" }, "require": { "php": ">=7.1.0" }, "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpstan/phpstan": "1.12.28 || 1.4.10", "phpunit/phpunit": "^9.6 || ^7.5" }, "type": "library", @@ -2988,7 +2881,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.2.0" + "source": "https://github.com/reactphp/promise/tree/v3.3.0" }, "funding": [ { @@ -2996,7 +2889,7 @@ "type": "open_collective" } ], - "time": "2024-05-24T10:39:05+00:00" + "time": "2025-08-19T18:57:03+00:00" }, { "name": "s9e/regexp-builder", @@ -3088,16 +2981,16 @@ }, { "name": "s9e/text-formatter", - "version": "2.18.0", + "version": "2.19.0", "source": { "type": "git", "url": "https://github.com/s9e/TextFormatter.git", - "reference": "4970711f25d94306b4835b723b9cc5010170ea37" + "reference": "d65a4f61cbe494937afb3150dc73b6e757d400d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/s9e/TextFormatter/zipball/4970711f25d94306b4835b723b9cc5010170ea37", - "reference": "4970711f25d94306b4835b723b9cc5010170ea37", + "url": "https://api.github.com/repos/s9e/TextFormatter/zipball/d65a4f61cbe494937afb3150dc73b6e757d400d3", + "reference": "d65a4f61cbe494937afb3150dc73b6e757d400d3", "shasum": "" }, "require": { @@ -3125,7 +3018,7 @@ }, "type": "library", "extra": { - "version": "2.18.0" + "version": "2.19.0" }, "autoload": { "psr-4": { @@ -3157,9 +3050,9 @@ ], "support": { "issues": "https://github.com/s9e/TextFormatter/issues", - "source": "https://github.com/s9e/TextFormatter/tree/2.18.0" + "source": "https://github.com/s9e/TextFormatter/tree/2.19.0" }, - "time": "2024-07-24T14:50:52+00:00" + "time": "2025-04-26T09:27:34+00:00" }, { "name": "seld/jsonlint", @@ -3401,20 +3294,20 @@ }, { "name": "spomky-labs/pki-framework", - "version": "1.2.2", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/pki-framework.git", - "reference": "5ac374c3e295c8b917208ff41b4d30f76668478c" + "reference": "eced5b5ce70518b983ff2be486e902bbd15135ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/5ac374c3e295c8b917208ff41b4d30f76668478c", - "reference": "5ac374c3e295c8b917208ff41b4d30f76668478c", + "url": "https://api.github.com/repos/Spomky-Labs/pki-framework/zipball/eced5b5ce70518b983ff2be486e902bbd15135ae", + "reference": "eced5b5ce70518b983ff2be486e902bbd15135ae", "shasum": "" }, "require": { - "brick/math": "^0.10|^0.11|^0.12", + "brick/math": "^0.10|^0.11|^0.12|^0.13", "ext-mbstring": "*", "php": ">=8.1" }, @@ -3429,7 +3322,7 @@ "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", "phpstan/phpstan-phpunit": "^1.1|^2.0", "phpstan/phpstan-strict-rules": "^1.3|^2.0", - "phpunit/phpunit": "^10.1|^11.0", + "phpunit/phpunit": "^10.1|^11.0|^12.0", "rector/rector": "^1.0|^2.0", "roave/security-advisories": "dev-latest", "symfony/string": "^6.4|^7.0", @@ -3494,7 +3387,7 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/pki-framework/issues", - "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.2.2" + "source": "https://github.com/Spomky-Labs/pki-framework/tree/1.3.0" }, "funding": [ { @@ -3506,20 +3399,20 @@ "type": "patreon" } ], - "time": "2025-01-03T09:35:48+00:00" + "time": "2025-06-13T08:35:04+00:00" }, { "name": "symfony/config", - "version": "v6.4.14", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef" + "reference": "80e2cf005cf17138c97193be0434cdcfd1b2212e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef", - "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef", + "url": "https://api.github.com/repos/symfony/config/zipball/80e2cf005cf17138c97193be0434cdcfd1b2212e", + "reference": "80e2cf005cf17138c97193be0434cdcfd1b2212e", "shasum": "" }, "require": { @@ -3565,7 +3458,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.14" + "source": "https://github.com/symfony/config/tree/v6.4.24" }, "funding": [ { @@ -3576,25 +3469,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-04T11:33:53+00:00" + "time": "2025-07-26T13:50:30+00:00" }, { "name": "symfony/console", - "version": "v6.4.20", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36" + "reference": "273fd29ff30ba0a88ca5fb83f7cf1ab69306adae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2e4af9c952617cc3f9559ff706aee420a8464c36", - "reference": "2e4af9c952617cc3f9559ff706aee420a8464c36", + "url": "https://api.github.com/repos/symfony/console/zipball/273fd29ff30ba0a88ca5fb83f7cf1ab69306adae", + "reference": "273fd29ff30ba0a88ca5fb83f7cf1ab69306adae", "shasum": "" }, "require": { @@ -3659,7 +3556,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.20" + "source": "https://github.com/symfony/console/tree/v6.4.25" }, "funding": [ { @@ -3670,25 +3567,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-03T17:16:38+00:00" + "time": "2025-08-22T10:21:53+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.20", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "c49796a9184a532843e78e50df9e55708b92543a" + "reference": "900da8a42eceeb4a13a0ec34caa7db49328daff3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/c49796a9184a532843e78e50df9e55708b92543a", - "reference": "c49796a9184a532843e78e50df9e55708b92543a", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/900da8a42eceeb4a13a0ec34caa7db49328daff3", + "reference": "900da8a42eceeb4a13a0ec34caa7db49328daff3", "shasum": "" }, "require": { @@ -3740,7 +3641,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.20" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.25" }, "funding": [ { @@ -3751,25 +3652,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-13T09:55:08+00:00" + "time": "2025-08-13T09:41:44+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -3782,7 +3687,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -3807,7 +3712,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -3823,20 +3728,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.20", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031" + "reference": "30fd0b3cf0e972e82636038ce4db0e4fe777112c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/aa3bcf4f7674719df078e61cc8062e5b7f752031", - "reference": "aa3bcf4f7674719df078e61cc8062e5b7f752031", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/30fd0b3cf0e972e82636038ce4db0e4fe777112c", + "reference": "30fd0b3cf0e972e82636038ce4db0e4fe777112c", "shasum": "" }, "require": { @@ -3882,7 +3787,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.20" + "source": "https://github.com/symfony/error-handler/tree/v6.4.24" }, "funding": [ { @@ -3893,25 +3798,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-01T13:00:38+00:00" + "time": "2025-07-24T08:25:04+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.13", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e" + "reference": "b0cf3162020603587363f0551cd3be43958611ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", - "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b0cf3162020603587363f0551cd3be43958611ff", + "reference": "b0cf3162020603587363f0551cd3be43958611ff", "shasum": "" }, "require": { @@ -3962,7 +3871,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.25" }, "funding": [ { @@ -3973,25 +3882,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-08-13T09:41:44+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -4005,7 +3918,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4038,7 +3951,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -4054,20 +3967,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", + "reference": "75ae2edb7cdcc0c53766c30b0a2512b8df574bd8", "shasum": "" }, "require": { @@ -4104,7 +4017,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "source": "https://github.com/symfony/filesystem/tree/v6.4.24" }, "funding": [ { @@ -4115,25 +4028,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/finder", - "version": "v6.4.17", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7" + "reference": "73089124388c8510efb8d2d1689285d285937b08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", + "url": "https://api.github.com/repos/symfony/finder/zipball/73089124388c8510efb8d2d1689285d285937b08", + "reference": "73089124388c8510efb8d2d1689285d285937b08", "shasum": "" }, "require": { @@ -4168,7 +4085,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.17" + "source": "https://github.com/symfony/finder/tree/v6.4.24" }, "funding": [ { @@ -4179,25 +4096,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-29T13:51:37+00:00" + "time": "2025-07-15T12:02:45+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.19", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "3294a433fc9d12ae58128174896b5b1822c28dad" + "reference": "b8e9dce2d8acba3c32af467bb58e0c3656886181" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/3294a433fc9d12ae58128174896b5b1822c28dad", - "reference": "3294a433fc9d12ae58128174896b5b1822c28dad", + "url": "https://api.github.com/repos/symfony/http-client/zipball/b8e9dce2d8acba3c32af467bb58e0c3656886181", + "reference": "b8e9dce2d8acba3c32af467bb58e0c3656886181", "shasum": "" }, "require": { @@ -4205,6 +4126,7 @@ "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/polyfill-php83": "^1.29", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -4261,7 +4183,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.19" + "source": "https://github.com/symfony/http-client/tree/v6.4.25" }, "funding": [ { @@ -4272,25 +4194,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-13T09:55:13+00:00" + "time": "2025-08-27T07:01:16+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.5.2", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645" + "reference": "75d7043853a42837e68111812f4d964b01e5101c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ee8d807ab20fcb51267fdace50fbe3494c31e645", - "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", + "reference": "75d7043853a42837e68111812f4d964b01e5101c", "shasum": "" }, "require": { @@ -4303,7 +4229,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -4339,7 +4265,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.2" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0" }, "funding": [ { @@ -4355,20 +4281,20 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:49:48+00:00" + "time": "2025-04-29T11:18:49+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.18", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db" + "reference": "6bc974c0035b643aa497c58d46d9e25185e4b272" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0492d6217e5ab48f51fca76f64cf8e78919d0db", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6bc974c0035b643aa497c58d46d9e25185e4b272", + "reference": "6bc974c0035b643aa497c58d46d9e25185e4b272", "shasum": "" }, "require": { @@ -4416,7 +4342,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.18" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.25" }, "funding": [ { @@ -4427,25 +4353,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-09T15:48:56+00:00" + "time": "2025-08-20T06:48:20+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.20", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37" + "reference": "a0ee3cea5cabf4ed960fd2ef57668ceeacdb6e15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6be6db31bc74693ce5516e1fd5e5ff1171005e37", - "reference": "6be6db31bc74693ce5516e1fd5e5ff1171005e37", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a0ee3cea5cabf4ed960fd2ef57668ceeacdb6e15", + "reference": "a0ee3cea5cabf4ed960fd2ef57668ceeacdb6e15", "shasum": "" }, "require": { @@ -4530,7 +4460,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.20" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.25" }, "funding": [ { @@ -4541,25 +4471,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-28T13:27:10+00:00" + "time": "2025-08-29T07:55:45+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.18", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11" + "reference": "628b43b45a3e6b15c8a633fb22df547ed9b492a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", - "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", + "url": "https://api.github.com/repos/symfony/mailer/zipball/628b43b45a3e6b15c8a633fb22df547ed9b492a2", + "reference": "628b43b45a3e6b15c8a633fb22df547ed9b492a2", "shasum": "" }, "require": { @@ -4610,7 +4544,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.18" + "source": "https://github.com/symfony/mailer/tree/v6.4.25" }, "funding": [ { @@ -4621,25 +4555,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-24T15:27:15+00:00" + "time": "2025-08-13T09:41:44+00:00" }, { "name": "symfony/mime", - "version": "v6.4.19", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3" + "reference": "664d5e844a2de5e11c8255d0aef6bc15a9660ac7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3", - "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3", + "url": "https://api.github.com/repos/symfony/mime/zipball/664d5e844a2de5e11c8255d0aef6bc15a9660ac7", + "reference": "664d5e844a2de5e11c8255d0aef6bc15a9660ac7", "shasum": "" }, "require": { @@ -4695,7 +4633,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.19" + "source": "https://github.com/symfony/mime/tree/v6.4.24" }, "funding": [ { @@ -4706,16 +4644,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-17T21:23:52+00:00" + "time": "2025-07-15T12:02:45+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", @@ -4774,7 +4716,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" }, "funding": [ { @@ -4785,6 +4727,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -4794,16 +4740,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", "shasum": "" }, "require": { @@ -4852,7 +4798,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" }, "funding": [ { @@ -4863,25 +4809,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-06-27T09:58:17+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { @@ -4935,7 +4885,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" }, "funding": [ { @@ -4946,16 +4896,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -5016,7 +4970,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" }, "funding": [ { @@ -5027,6 +4981,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5036,19 +4994,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -5096,7 +5055,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" }, "funding": [ { @@ -5107,16 +5066,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", @@ -5172,7 +5135,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.33.0" }, "funding": [ { @@ -5183,6 +5146,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5192,16 +5159,16 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { @@ -5252,7 +5219,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" }, "funding": [ { @@ -5263,16 +5230,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", @@ -5328,7 +5299,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.33.0" }, "funding": [ { @@ -5339,6 +5310,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -5348,16 +5323,16 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", "shasum": "" }, "require": { @@ -5404,7 +5379,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" }, "funding": [ { @@ -5415,25 +5390,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-07-08T02:45:35+00:00" }, { "name": "symfony/process", - "version": "v6.4.20", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20" + "reference": "6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20", - "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20", + "url": "https://api.github.com/repos/symfony/process/zipball/6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8", + "reference": "6be2f0c9ab3428587c07bed03aa9e3d1b823c6c8", "shasum": "" }, "require": { @@ -5465,7 +5444,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.20" + "source": "https://github.com/symfony/process/tree/v6.4.25" }, "funding": [ { @@ -5476,25 +5455,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-10T17:11:00+00:00" + "time": "2025-08-14T06:23:17+00:00" }, { "name": "symfony/proxy-manager-bridge", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/proxy-manager-bridge.git", - "reference": "8932b572e147e80fb498045c580eb14215197529" + "reference": "2a14a1539f2854a8adb73319abf8923b1d7a6589" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/8932b572e147e80fb498045c580eb14215197529", - "reference": "8932b572e147e80fb498045c580eb14215197529", + "url": "https://api.github.com/repos/symfony/proxy-manager-bridge/zipball/2a14a1539f2854a8adb73319abf8923b1d7a6589", + "reference": "2a14a1539f2854a8adb73319abf8923b1d7a6589", "shasum": "" }, "require": { @@ -5532,7 +5515,7 @@ "description": "Provides integration for ProxyManager with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.4.13" + "source": "https://github.com/symfony/proxy-manager-bridge/tree/v6.4.24" }, "funding": [ { @@ -5543,25 +5526,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-07-14T16:38:25+00:00" }, { "name": "symfony/routing", - "version": "v6.4.18", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68" + "reference": "e4f94e625c8e6f910aa004a0042f7b2d398278f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e9bfc94953019089acdfb9be51c1b9142c4afa68", - "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68", + "url": "https://api.github.com/repos/symfony/routing/zipball/e4f94e625c8e6f910aa004a0042f7b2d398278f5", + "reference": "e4f94e625c8e6f910aa004a0042f7b2d398278f5", "shasum": "" }, "require": { @@ -5615,7 +5602,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.18" + "source": "https://github.com/symfony/routing/tree/v6.4.24" }, "funding": [ { @@ -5626,25 +5613,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-09T08:51:02+00:00" + "time": "2025-07-15T08:46:37+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", "shasum": "" }, "require": { @@ -5662,7 +5653,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -5698,7 +5689,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" }, "funding": [ { @@ -5714,20 +5705,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-04-25T09:37:31+00:00" }, { "name": "symfony/string", - "version": "v6.4.15", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" + "reference": "7cdec7edfaf2cdd9c18901e35bcf9653d6209ff1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "url": "https://api.github.com/repos/symfony/string/zipball/7cdec7edfaf2cdd9c18901e35bcf9653d6209ff1", + "reference": "7cdec7edfaf2cdd9c18901e35bcf9653d6209ff1", "shasum": "" }, "require": { @@ -5784,7 +5775,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.15" + "source": "https://github.com/symfony/string/tree/v6.4.25" }, "funding": [ { @@ -5795,25 +5786,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-13T13:31:12+00:00" + "time": "2025-08-22T12:33:20+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", "shasum": "" }, "require": { @@ -5826,7 +5821,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -5862,7 +5857,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" }, "funding": [ { @@ -5878,20 +5873,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-27T08:32:26+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.4.20", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "bb423dfaa51b6d88b1d64197ae695a0c8ac73778" + "reference": "9d13e87591c9de3221c8d6f23cd9a2b5958607bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/bb423dfaa51b6d88b1d64197ae695a0c8ac73778", - "reference": "bb423dfaa51b6d88b1d64197ae695a0c8ac73778", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/9d13e87591c9de3221c8d6f23cd9a2b5958607bf", + "reference": "9d13e87591c9de3221c8d6f23cd9a2b5958607bf", "shasum": "" }, "require": { @@ -5971,7 +5966,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.20" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.25" }, "funding": [ { @@ -5982,25 +5977,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-28T13:08:36+00:00" + "time": "2025-08-13T09:41:44+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.18", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837" + "reference": "c6cd92486e9fc32506370822c57bc02353a5a92c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4ad10cf8b020e77ba665305bb7804389884b4837", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6cd92486e9fc32506370822c57bc02353a5a92c", + "reference": "c6cd92486e9fc32506370822c57bc02353a5a92c", "shasum": "" }, "require": { @@ -6012,7 +6011,6 @@ "symfony/console": "<5.4" }, "require-dev": { - "ext-iconv": "*", "symfony/console": "^5.4|^6.0|^7.0", "symfony/error-handler": "^6.3|^7.0", "symfony/http-kernel": "^5.4|^6.0|^7.0", @@ -6056,7 +6054,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.18" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.25" }, "funding": [ { @@ -6067,25 +6065,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-17T11:26:11+00:00" + "time": "2025-08-13T09:41:44+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.20", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2" + "reference": "4ff50a1b7c75d1d596aca50899d0c8c7e3de8358" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/998df255e9e6a15a36ae35e9c6cd818c17cf92a2", - "reference": "998df255e9e6a15a36ae35e9c6cd818c17cf92a2", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/4ff50a1b7c75d1d596aca50899d0c8c7e3de8358", + "reference": "4ff50a1b7c75d1d596aca50899d0c8c7e3de8358", "shasum": "" }, "require": { @@ -6133,7 +6135,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.20" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.25" }, "funding": [ { @@ -6144,25 +6146,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-13T09:55:08+00:00" + "time": "2025-08-18T13:06:32+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.20", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "28ee818fce4a73ac1474346b94e4b966f665c53f" + "reference": "e54b060bc9c3dc3d4258bf0d165d0064e755f565" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/28ee818fce4a73ac1474346b94e4b966f665c53f", - "reference": "28ee818fce4a73ac1474346b94e4b966f665c53f", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e54b060bc9c3dc3d4258bf0d165d0064e755f565", + "reference": "e54b060bc9c3dc3d4258bf0d165d0064e755f565", "shasum": "" }, "require": { @@ -6205,7 +6211,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.20" + "source": "https://github.com/symfony/yaml/tree/v6.4.25" }, "funding": [ { @@ -6216,25 +6222,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-27T20:15:30+00:00" + "time": "2025-08-26T16:59:00+00:00" }, { "name": "twig/twig", - "version": "v3.20.0", + "version": "v3.21.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3468920399451a384bef53cf7996965f7cd40183" + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183", - "reference": "3468920399451a384bef53cf7996965f7cd40183", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/285123877d4dd97dd7c11842ac5fb7e86e60d81d", + "reference": "285123877d4dd97dd7c11842ac5fb7e86e60d81d", "shasum": "" }, "require": { @@ -6288,7 +6298,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.20.0" + "source": "https://github.com/twigphp/Twig/tree/v3.21.1" }, "funding": [ { @@ -6300,11 +6310,11 @@ "type": "tidelift" } ], - "time": "2025-02-13T08:34:43+00:00" + "time": "2025-05-03T07:21:55+00:00" }, { "name": "web-token/jwt-key-mgmt", - "version": "3.4.6", + "version": "3.4.8", "source": { "type": "git", "url": "https://github.com/web-token/jwt-key-mgmt.git", @@ -6359,7 +6369,7 @@ "symfony" ], "support": { - "source": "https://github.com/web-token/jwt-key-mgmt/tree/3.4.6" + "source": "https://github.com/web-token/jwt-key-mgmt/tree/3.4.8" }, "funding": [ { @@ -6372,16 +6382,16 @@ }, { "name": "web-token/jwt-library", - "version": "3.4.7", + "version": "3.4.8", "source": { "type": "git", "url": "https://github.com/web-token/jwt-library.git", - "reference": "1a25c8ced3e2b3c31d32dcfad215cbd8cb812f28" + "reference": "92445671cc788fa5f639898a67c06f9fd0bf491f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/web-token/jwt-library/zipball/1a25c8ced3e2b3c31d32dcfad215cbd8cb812f28", - "reference": "1a25c8ced3e2b3c31d32dcfad215cbd8cb812f28", + "url": "https://api.github.com/repos/web-token/jwt-library/zipball/92445671cc788fa5f639898a67c06f9fd0bf491f", + "reference": "92445671cc788fa5f639898a67c06f9fd0bf491f", "shasum": "" }, "require": { @@ -6391,7 +6401,7 @@ "paragonie/constant_time_encoding": "^2.6|^3.0", "paragonie/sodium_compat": "^1.20|^2.0", "php": ">=8.1", - "psr/cache": "^3.0", + "psr/cache": "^2.0|^3.0", "psr/clock": "^1.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", @@ -6454,7 +6464,7 @@ ], "support": { "issues": "https://github.com/web-token/jwt-library/issues", - "source": "https://github.com/web-token/jwt-library/tree/3.4.7" + "source": "https://github.com/web-token/jwt-library/tree/3.4.8" }, "funding": [ { @@ -6466,11 +6476,11 @@ "type": "patreon" } ], - "time": "2024-07-02T16:35:11+00:00" + "time": "2025-05-07T09:11:18+00:00" }, { "name": "web-token/jwt-signature", - "version": "3.4.6", + "version": "3.4.8", "source": { "type": "git", "url": "https://github.com/web-token/jwt-signature.git", @@ -6522,7 +6532,7 @@ "symfony" ], "support": { - "source": "https://github.com/web-token/jwt-signature/tree/3.4.6" + "source": "https://github.com/web-token/jwt-signature/tree/3.4.8" }, "funding": [ { @@ -6535,7 +6545,7 @@ }, { "name": "web-token/jwt-signature-algorithm-ecdsa", - "version": "3.4.6", + "version": "3.4.8", "source": { "type": "git", "url": "https://github.com/web-token/jwt-signature-algorithm-ecdsa.git", @@ -6588,7 +6598,7 @@ "symfony" ], "support": { - "source": "https://github.com/web-token/jwt-signature-algorithm-ecdsa/tree/3.4.6" + "source": "https://github.com/web-token/jwt-signature-algorithm-ecdsa/tree/3.4.8" }, "funding": [ { @@ -6601,7 +6611,7 @@ }, { "name": "web-token/jwt-util-ecc", - "version": "3.4.6", + "version": "3.4.8", "source": { "type": "git", "url": "https://github.com/web-token/jwt-util-ecc.git", @@ -6654,7 +6664,7 @@ "symfony" ], "support": { - "source": "https://github.com/web-token/jwt-util-ecc/tree/3.4.6" + "source": "https://github.com/web-token/jwt-util-ecc/tree/3.4.8" }, "funding": [ { @@ -6669,16 +6679,16 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.4", + "version": "v2.6.5", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" + "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", - "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "url": "https://api.github.com/repos/amphp/amp/zipball/d7dda98dae26e56f3f6fcfbf1c1f819c9a993207", + "reference": "d7dda98dae26e56f3f6fcfbf1c1f819c9a993207", "shasum": "" }, "require": { @@ -6694,11 +6704,6 @@ "vimeo/psalm": "^3.12" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, "autoload": { "files": [ "lib/functions.php", @@ -6746,7 +6751,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.4" + "source": "https://github.com/amphp/amp/tree/v2.6.5" }, "funding": [ { @@ -6754,7 +6759,7 @@ "type": "github" } ], - "time": "2024-03-21T18:52:26+00:00" + "time": "2025-09-03T19:41:28+00:00" }, { "name": "amphp/byte-stream", @@ -6967,16 +6972,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -6986,10 +6991,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -7016,7 +7021,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -7024,7 +7029,7 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "laravel/homestead", @@ -7078,20 +7083,21 @@ "issues": "https://github.com/laravel/homestead/issues", "source": "https://github.com/laravel/homestead/tree/v14.5.0" }, + "abandoned": true, "time": "2023-10-06T03:16:47+00:00" }, { "name": "masterminds/html5", - "version": "2.9.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + "reference": "fcf91eb64359852f00d921887b219479b4f21251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", "shasum": "" }, "require": { @@ -7143,9 +7149,9 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" }, - "time": "2024-03-31T07:05:07+00:00" + "time": "2025-07-25T09:04:22+00:00" }, { "name": "misantron/dbunit", @@ -7204,16 +7210,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.3", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "faed855a7b5f4d4637717c2b3863e277116beb36" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/faed855a7b5f4d4637717c2b3863e277116beb36", - "reference": "faed855a7b5f4d4637717c2b3863e277116beb36", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -7252,7 +7258,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.3" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -7260,7 +7266,7 @@ "type": "tidelift" } ], - "time": "2025-07-05T12:25:42+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "netresearch/jsonmapper", @@ -7654,16 +7660,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.2", + "version": "5.6.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", - "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94f8051919d1b0369a6bcc7931d679a511c03fe9", + "reference": "94f8051919d1b0369a6bcc7931d679a511c03fe9", "shasum": "" }, "require": { @@ -7712,9 +7718,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.3" }, - "time": "2025-04-13T19:20:35+00:00" + "time": "2025-08-01T19:43:32+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -7776,16 +7782,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -7817,9 +7823,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "phpunit/php-code-coverage", @@ -8144,16 +8150,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.48", + "version": "10.5.55", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "6e0a2bc39f6fae7617989d690d76c48e6d2eb541" + "reference": "4b2d546b336876bd9562f24641b08a25335b06b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6e0a2bc39f6fae7617989d690d76c48e6d2eb541", - "reference": "6e0a2bc39f6fae7617989d690d76c48e6d2eb541", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b2d546b336876bd9562f24641b08a25335b06b6", + "reference": "4b2d546b336876bd9562f24641b08a25335b06b6", "shasum": "" }, "require": { @@ -8163,7 +8169,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.13.3", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.1", @@ -8174,13 +8180,13 @@ "phpunit/php-timer": "^6.0.0", "sebastian/cli-parser": "^2.0.1", "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", + "sebastian/comparator": "^5.0.4", "sebastian/diff": "^5.1.1", "sebastian/environment": "^6.1.0", "sebastian/exporter": "^5.1.2", "sebastian/global-state": "^6.0.2", "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", "sebastian/type": "^4.0.0", "sebastian/version": "^4.0.1" }, @@ -8225,7 +8231,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.48" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.55" }, "funding": [ { @@ -8249,7 +8255,7 @@ "type": "tidelift" } ], - "time": "2025-07-11T04:07:17+00:00" + "time": "2025-09-14T06:19:20+00:00" }, { "name": "psalm/plugin-symfony", @@ -8486,16 +8492,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "5.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e", + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e", "shasum": "" }, "require": { @@ -8551,15 +8557,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2025-09-07T05:25:07+00:00" }, { "name": "sebastian/complexity", @@ -9062,23 +9080,23 @@ }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -9113,15 +9131,28 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2025-08-10T07:50:56+00:00" }, { "name": "sebastian/type", @@ -9302,16 +9333,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.13.0", + "version": "3.13.4", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "65ff2489553b83b4597e89c3b8b721487011d186" + "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/65ff2489553b83b4597e89c3b8b721487011d186", - "reference": "65ff2489553b83b4597e89c3b8b721487011d186", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ad545ea9c1b7d270ce0fc9cbfb884161cd706119", + "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119", "shasum": "" }, "require": { @@ -9382,20 +9413,20 @@ "type": "thanks_dev" } ], - "time": "2025-05-11T03:36:00+00:00" + "time": "2025-09-05T05:47:09+00:00" }, { "name": "symfony/browser-kit", - "version": "v6.4.19", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "ce95f3e3239159e7fa3be7690c6ce95a4714637f" + "reference": "3537d17782f8c20795b194acb6859071b60c6fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ce95f3e3239159e7fa3be7690c6ce95a4714637f", - "reference": "ce95f3e3239159e7fa3be7690c6ce95a4714637f", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/3537d17782f8c20795b194acb6859071b60c6fac", + "reference": "3537d17782f8c20795b194acb6859071b60c6fac", "shasum": "" }, "require": { @@ -9434,7 +9465,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.4.19" + "source": "https://github.com/symfony/browser-kit/tree/v6.4.24" }, "funding": [ { @@ -9445,25 +9476,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-14T11:23:16+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/cache", - "version": "v6.4.20", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432" + "reference": "d038cd3054aeaf1c674022a77048b2ef6376a175" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432", - "reference": "95af448bb7c3d8db02f7b4f5cbf3cb7a6ff1e432", + "url": "https://api.github.com/repos/symfony/cache/zipball/d038cd3054aeaf1c674022a77048b2ef6376a175", + "reference": "d038cd3054aeaf1c674022a77048b2ef6376a175", "shasum": "" }, "require": { @@ -9530,7 +9565,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.20" + "source": "https://github.com/symfony/cache/tree/v6.4.24" }, "funding": [ { @@ -9541,25 +9576,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-08T15:51:34+00:00" + "time": "2025-07-30T09:32:03+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", "shasum": "" }, "require": { @@ -9573,7 +9612,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -9606,7 +9645,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" }, "funding": [ { @@ -9622,20 +9661,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-03-13T15:25:07+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e" + "reference": "9b784413143701aa3c94ac1869a159a9e53e8761" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/cb23e97813c5837a041b73a6d63a9ddff0778f5e", - "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/9b784413143701aa3c94ac1869a159a9e53e8761", + "reference": "9b784413143701aa3c94ac1869a159a9e53e8761", "shasum": "" }, "require": { @@ -9671,7 +9710,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.13" + "source": "https://github.com/symfony/css-selector/tree/v6.4.24" }, "funding": [ { @@ -9682,25 +9721,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.4.19", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "19073e3e0bb50cbc1cb286077069b3107085206f" + "reference": "976302990f9f2a6d4c07206836dd4ca77cae9524" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/19073e3e0bb50cbc1cb286077069b3107085206f", - "reference": "19073e3e0bb50cbc1cb286077069b3107085206f", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/976302990f9f2a6d4c07206836dd4ca77cae9524", + "reference": "976302990f9f2a6d4c07206836dd4ca77cae9524", "shasum": "" }, "require": { @@ -9738,7 +9781,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.19" + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.25" }, "funding": [ { @@ -9749,25 +9792,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-14T17:58:34+00:00" + "time": "2025-08-05T18:56:08+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.20", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce" + "reference": "1d6a764b58e4f780df00f71c20ba3a61095ea447" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce", - "reference": "51418a20079cb25af3fcb8fa8ae1ed82f7fdd1ce", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/1d6a764b58e4f780df00f71c20ba3a61095ea447", + "reference": "1d6a764b58e4f780df00f71c20ba3a61095ea447", "shasum": "" }, "require": { @@ -9887,7 +9934,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.20" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.25" }, "funding": [ { @@ -9898,12 +9945,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-03-23T16:46:24+00:00" + "time": "2025-08-26T10:44:20+00:00" }, { "name": "theseer/tokenizer", From 9e764b2a98876fb6191cca4bb46bc68ce8603c27 Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 16 Sep 2025 22:35:55 +0700 Subject: [PATCH 12/16] [ticket/17543] Remove ReflectionProperty::setAccessible() method calls As of PHP 8.1.0, calling this method has no effect; all properties are accessible by default. The method is deprecated since PHP 8.5. PHPBB-17543 --- tests/avatar/driver_gravatar_test.php | 2 -- tests/ban/ban_manager_test.php | 1 - tests/cache/file_driver_test.php | 16 ---------------- tests/captcha/turnstile_test.php | 7 ------- tests/datetime/from_format_test.php | 2 -- tests/dbal/db_tools_test.php | 1 - tests/email/email_parsing_test.php | 1 - tests/extension/extension_base_test.php | 1 - tests/files/types_local_test.php | 1 - tests/files/upload_test.php | 1 - tests/filesystem/helper_realpath_test.php | 1 - tests/filesystem/realpath_test.php | 1 - tests/group/helper_test_case.php | 2 -- tests/language/language_test.php | 2 -- tests/messenger/queue_test.php | 2 -- tests/migrator/get_callable_from_step_test.php | 1 - .../notification_method_email_test.php | 1 - .../notification_method_webpush_test.php | 1 - tests/template/extension_test.php | 1 - tests/template/template_test_case.php | 1 - tests/template/twig_test.php | 1 - tests/text_reparser/plugins/post_text_test.php | 1 - .../plugins/test_row_based_plugin.php | 1 - tests/ucp/controller_webpush_test.php | 2 -- tests/upload/filespec_test.php | 2 -- 25 files changed, 53 deletions(-) diff --git a/tests/avatar/driver_gravatar_test.php b/tests/avatar/driver_gravatar_test.php index 026655e11a..bc84f35610 100644 --- a/tests/avatar/driver_gravatar_test.php +++ b/tests/avatar/driver_gravatar_test.php @@ -166,13 +166,11 @@ class phpbb_avatar_driver_gravatar_test extends \phpbb_database_test_case ->willReturn([]); $requestInputReflection = new \ReflectionProperty($request, 'input'); - $requestInputReflection->setAccessible(true); $request_data[request_interface::GET] = $request_data[request_interface::GET] ?? []; $request_data[request_interface::POST] = $request_data[request_interface::POST] ?? []; $request_data[request_interface::REQUEST] = $request_data[request_interface::GET] + $request_data[request_interface::POST]; $requestInputReflection->setValue($request, $request_data); $requestTypeCastHelperReflection = new \ReflectionProperty($request, 'type_cast_helper'); - $requestTypeCastHelperReflection->setAccessible(true); $requestTypeCastHelperReflection->setValue($request, new \phpbb\request\type_cast_helper()); $this->gravatar->prepare_form($request, $this->template, $this->user, $row, $error); diff --git a/tests/ban/ban_manager_test.php b/tests/ban/ban_manager_test.php index cdc64435b5..34a0acdaa3 100644 --- a/tests/ban/ban_manager_test.php +++ b/tests/ban/ban_manager_test.php @@ -411,7 +411,6 @@ class ban_manager_test extends \phpbb_session_test_case $ban_type_ip_reflection = new \ReflectionClass($ban_type_ip); $get_excluded_reflection = $ban_type_ip_reflection->getMethod('get_excluded'); - $get_excluded_reflection->setAccessible(true); $this->assertFalse($get_excluded_reflection->invoke($ban_type_ip)); } diff --git a/tests/cache/file_driver_test.php b/tests/cache/file_driver_test.php index c8fe44be74..f615cea3b0 100644 --- a/tests/cache/file_driver_test.php +++ b/tests/cache/file_driver_test.php @@ -68,7 +68,6 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case $filename = "{$this->cache_dir}unreadable.$phpEx"; @chmod($filename, 0000); $readReflection = new \ReflectionMethod($this->cache_file, '_read'); - $readReflection->setAccessible(true); $this->assertFalse($readReflection->invoke($this->cache_file, 'unreadable')); @chmod($filename, 0600); $this->assertNotFalse($readReflection->invoke($this->cache_file, 'unreadable')); @@ -79,11 +78,9 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case global $phpEx; $reflectionCacheVars = new \ReflectionProperty($this->cache_file, 'vars'); - $reflectionCacheVars->setAccessible(true); $reflectionCacheVars->setValue($this->cache_file, ['foo' => 'bar']); $reflectionCacheVarExpires = new \ReflectionProperty($this->cache_file, 'var_expires'); - $reflectionCacheVarExpires->setAccessible(true); $reflectionCacheVarExpires->setValue($this->cache_file, ['foo' => time() + 86400]); // Create file in invalid format @@ -95,7 +92,6 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case file_put_contents($filename, $cache_data); $readReflection = new \ReflectionMethod($this->cache_file, '_read'); - $readReflection->setAccessible(true); $this->assertFalse($readReflection->invoke($this->cache_file, 'data_global')); } @@ -104,11 +100,9 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case global $phpEx; $reflectionCacheVars = new \ReflectionProperty($this->cache_file, 'vars'); - $reflectionCacheVars->setAccessible(true); $reflectionCacheVars->setValue($this->cache_file, ['foo' => 'bar']); $reflectionCacheVarExpires = new \ReflectionProperty($this->cache_file, 'var_expires'); - $reflectionCacheVarExpires->setAccessible(true); $reflectionCacheVarExpires->setValue($this->cache_file, ['foo' => time() + 86400]); // Create file in invalid format @@ -120,7 +114,6 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case file_put_contents($filename, $cache_data); $readReflection = new \ReflectionMethod($this->cache_file, '_read'); - $readReflection->setAccessible(true); $this->assertFalse($readReflection->invoke($this->cache_file, 'data_global')); } @@ -129,11 +122,9 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case global $phpEx; $reflectionCacheVars = new \ReflectionProperty($this->cache_file, 'vars'); - $reflectionCacheVars->setAccessible(true); $reflectionCacheVars->setValue($this->cache_file, ['foo' => 'bar']); $reflectionCacheVarExpires = new \ReflectionProperty($this->cache_file, 'var_expires'); - $reflectionCacheVarExpires->setAccessible(true); $reflectionCacheVarExpires->setValue($this->cache_file, ['foo' => time() + 86400]); // Create file in invalid format @@ -145,18 +136,15 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case file_put_contents($filename, $cache_data); $readReflection = new \ReflectionMethod($this->cache_file, '_read'); - $readReflection->setAccessible(true); $this->assertFalse($readReflection->invoke($this->cache_file, 'data_global')); } public function test_read_data_global_expired() { $reflectionCacheVars = new \ReflectionProperty($this->cache_file, 'vars'); - $reflectionCacheVars->setAccessible(true); $reflectionCacheVars->setValue($this->cache_file, ['foo' => 'bar']); $reflectionCacheVarExpires = new \ReflectionProperty($this->cache_file, 'var_expires'); - $reflectionCacheVarExpires->setAccessible(true); $reflectionCacheVarExpires->setValue($this->cache_file, ['foo' => time() - 86400]); // Create file in invalid format @@ -167,7 +155,6 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case $reflectionCacheVarExpires->setValue($this->cache_file, []); $readReflection = new \ReflectionMethod($this->cache_file, '_read'); - $readReflection->setAccessible(true); $this->assertTrue($readReflection->invoke($this->cache_file, 'data_global')); // Check data, should be empty @@ -177,12 +164,10 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case public function test_read_data_global() { $reflectionCacheVars = new \ReflectionProperty($this->cache_file, 'vars'); - $reflectionCacheVars->setAccessible(true); $expectedVars = ['foo' => 'bar']; $reflectionCacheVars->setValue($this->cache_file, $expectedVars); $reflectionCacheVarExpires = new \ReflectionProperty($this->cache_file, 'var_expires'); - $reflectionCacheVarExpires->setAccessible(true); $expectedVarExpires = ['foo' => time() + 86400]; $reflectionCacheVarExpires->setValue($this->cache_file, $expectedVarExpires); @@ -196,7 +181,6 @@ class phpbb_cache_file_driver_test extends phpbb_cache_common_test_case $this->assertEquals([], $reflectionCacheVarExpires->getValue($this->cache_file)); $readReflection = new \ReflectionMethod($this->cache_file, '_read'); - $readReflection->setAccessible(true); $this->assertTrue($readReflection->invoke($this->cache_file, 'data_global')); // Check data, should be empty diff --git a/tests/captcha/turnstile_test.php b/tests/captcha/turnstile_test.php index 8d3c995810..c95e3225d2 100644 --- a/tests/captcha/turnstile_test.php +++ b/tests/captcha/turnstile_test.php @@ -244,7 +244,6 @@ class phpbb_captcha_turnstile_test extends \phpbb_database_test_case { $this->turnstile->set_name('custom_service'); $service_name_property = new \ReflectionProperty($this->turnstile, 'service_name'); - $service_name_property->setAccessible(true); $this->assertEquals('custom_service', $service_name_property->getValue($this->turnstile)); } @@ -275,7 +274,6 @@ class phpbb_captcha_turnstile_test extends \phpbb_database_test_case // Use reflection to inject the mocked client into the turnstile class $reflection = new \ReflectionClass($this->turnstile); $client_property = $reflection->getProperty('client'); - $client_property->setAccessible(true); $client_property->setValue($this->turnstile, $client_mock); // Validate that the CAPTCHA was solved successfully @@ -301,7 +299,6 @@ class phpbb_captcha_turnstile_test extends \phpbb_database_test_case // Use reflection to inject the mocked client into the turnstile class $reflection = new \ReflectionClass($this->turnstile); $client_property = $reflection->getProperty('client'); - $client_property->setAccessible(true); $client_property->setValue($this->turnstile, $client_mock); // Validatation fails due to guzzle exception @@ -333,9 +330,7 @@ class phpbb_captcha_turnstile_test extends \phpbb_database_test_case { $turnstile_reflection = new \ReflectionClass($this->turnstile); $get_client_method = $turnstile_reflection->getMethod('get_client'); - $get_client_method->setAccessible(true); $client_property = $turnstile_reflection->getProperty('client'); - $client_property->setAccessible(true); $this->assertFalse($client_property->isInitialized($this->turnstile)); $client = $get_client_method->invoke($this->turnstile); @@ -363,7 +358,6 @@ class phpbb_captcha_turnstile_test extends \phpbb_database_test_case // Use reflection to inject the mocked client into the turnstile class $reflection = new \ReflectionClass($this->turnstile); $client_property = $reflection->getProperty('client'); - $client_property->setAccessible(true); $client_property->setValue($this->turnstile, $client_mock); // Validate that the CAPTCHA was not solved @@ -374,7 +368,6 @@ class phpbb_captcha_turnstile_test extends \phpbb_database_test_case { // Mock is_solved to return false $is_solved_property = new \ReflectionProperty($this->turnstile, 'solved'); - $is_solved_property->setAccessible(true); $is_solved_property->setValue($this->turnstile, false); // Mock the template assignments diff --git a/tests/datetime/from_format_test.php b/tests/datetime/from_format_test.php index 7c76da32d3..8b4b39eb90 100644 --- a/tests/datetime/from_format_test.php +++ b/tests/datetime/from_format_test.php @@ -32,11 +32,9 @@ class phpbb_datetime_from_format_test extends phpbb_test_case $reflection_class = new ReflectionClass('\phpbb\language\language'); // Set default language files loaded flag to true $common_language_files_loaded_flag = $reflection_class->getProperty('common_language_files_loaded'); - $common_language_files_loaded_flag->setAccessible(true); $common_language_files_loaded_flag->setValue($this->lang, true); // Set up test language data $lang_array = $reflection_class->getProperty('lang'); - $lang_array->setAccessible(true); $lang_array->setValue($this->lang, [ 'datetime' => [ 'TODAY' => 'Today', diff --git a/tests/dbal/db_tools_test.php b/tests/dbal/db_tools_test.php index f6c108cdae..90fa0eca09 100644 --- a/tests/dbal/db_tools_test.php +++ b/tests/dbal/db_tools_test.php @@ -509,7 +509,6 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case if ($this->tools instanceof \phpbb\db\tools\mssql) { $max_length_method = new ReflectionMethod('\phpbb\db\tools\mssql', 'get_max_index_name_length'); - $max_length_method->setAccessible(true); $max_index_length = $max_length_method->invoke($this->tools); } diff --git a/tests/email/email_parsing_test.php b/tests/email/email_parsing_test.php index 574babea81..10447f363b 100644 --- a/tests/email/email_parsing_test.php +++ b/tests/email/email_parsing_test.php @@ -146,7 +146,6 @@ class phpbb_email_parsing_test extends phpbb_test_case $reflection = new ReflectionObject($this->email); $this->reflection_template_property = $reflection->getProperty('template'); - $this->reflection_template_property->setAccessible(true); } public static function email_parsing_data() diff --git a/tests/extension/extension_base_test.php b/tests/extension/extension_base_test.php index 7dc8c1a45c..e0d34fee81 100644 --- a/tests/extension/extension_base_test.php +++ b/tests/extension/extension_base_test.php @@ -27,7 +27,6 @@ class phpbb_extension_extension_base_test extends phpbb_test_case $reflection_class = new ReflectionClass('\phpbb\extension\base'); self::$reflection_method_get_migration_file_list = $reflection_class->getMethod('get_migration_file_list'); - self::$reflection_method_get_migration_file_list->setAccessible(true); } protected function setUp(): void diff --git a/tests/files/types_local_test.php b/tests/files/types_local_test.php index ea1fa23ecb..9cdbb50ced 100644 --- a/tests/files/types_local_test.php +++ b/tests/files/types_local_test.php @@ -146,7 +146,6 @@ class phpbb_files_types_local_test extends phpbb_test_case 'mimetype.extension_guesser' => new \phpbb\mimetype\extension_guesser(), ))); $filespec_local = new ReflectionProperty($filespec, 'local'); - $filespec_local->setAccessible(true); $filespec_local->setValue($filespec, true); $this->container->set('files.filespec', $filespec); $this->factory = new \phpbb\files\factory($this->container); diff --git a/tests/files/upload_test.php b/tests/files/upload_test.php index ab88b1cd83..beee220fd8 100644 --- a/tests/files/upload_test.php +++ b/tests/files/upload_test.php @@ -76,7 +76,6 @@ class phpbb_files_upload_test extends phpbb_test_case { $upload = new \phpbb\files\upload($this->factory, $this->language, $this->php_ini, $this->request); $disallowed_content = new ReflectionProperty($upload, 'disallowed_content'); - $disallowed_content->setAccessible(true); $upload->set_disallowed_content(array('foo')); $this->assertEquals(array('foo'), $disallowed_content->getValue($upload)); diff --git a/tests/filesystem/helper_realpath_test.php b/tests/filesystem/helper_realpath_test.php index 848a855a4d..448b2665bc 100644 --- a/tests/filesystem/helper_realpath_test.php +++ b/tests/filesystem/helper_realpath_test.php @@ -22,7 +22,6 @@ class phpbb_filesystem_helper_realpath_test extends phpbb_test_case parent::setUpBeforeClass(); self::$filesystem_helper_phpbb_own_realpath = new ReflectionMethod('\phpbb\filesystem\helper', 'phpbb_own_realpath'); - self::$filesystem_helper_phpbb_own_realpath->setAccessible(true); } protected function setUp(): void diff --git a/tests/filesystem/realpath_test.php b/tests/filesystem/realpath_test.php index 8119541844..75e34ea240 100644 --- a/tests/filesystem/realpath_test.php +++ b/tests/filesystem/realpath_test.php @@ -24,7 +24,6 @@ class phpbb_filesystem_realpath_test extends phpbb_test_case $reflection_class = new ReflectionClass('\phpbb\filesystem\filesystem'); self::$filesystem_own_realpath = $reflection_class->getMethod('phpbb_own_realpath'); - self::$filesystem_own_realpath->setAccessible(true); } protected function setUp(): void diff --git a/tests/group/helper_test_case.php b/tests/group/helper_test_case.php index 1514c616a9..3ee1d86b86 100644 --- a/tests/group/helper_test_case.php +++ b/tests/group/helper_test_case.php @@ -87,12 +87,10 @@ class phpbb_group_helper_test_case extends phpbb_test_case // Set default language files loaded flag to true $loaded_flag = $reflection_class->getProperty('common_language_files_loaded'); - $loaded_flag->setAccessible(true); $loaded_flag->setValue($lang, true); // Set up test language data $lang_array = $reflection_class->getProperty('lang'); - $lang_array->setAccessible(true); $lang_array->setValue($lang, $this->get_test_language_data_set()); // Set up event dispatcher diff --git a/tests/language/language_test.php b/tests/language/language_test.php index 2b1b245491..eaf2d5c800 100644 --- a/tests/language/language_test.php +++ b/tests/language/language_test.php @@ -30,12 +30,10 @@ class phpbb_language_test extends phpbb_test_case // Set default language files loaded flag to true $loaded_flag = $reflection_class->getProperty('common_language_files_loaded'); - $loaded_flag->setAccessible(true); $loaded_flag->setValue($this->lang, true); // Set up test language data $lang_array = $reflection_class->getProperty('lang'); - $lang_array->setAccessible(true); $lang_array->setValue($this->lang, $this->get_test_data_set()); } diff --git a/tests/messenger/queue_test.php b/tests/messenger/queue_test.php index a7f336b14a..457604fb25 100644 --- a/tests/messenger/queue_test.php +++ b/tests/messenger/queue_test.php @@ -191,7 +191,6 @@ class phpbb_messenger_queue_test extends phpbb_test_case $filesystem->method('phpbb_chmod') ->will($this->throwException(new filesystem_exception('Chmod failed'))); $filesystem_reflection = new \ReflectionProperty(queue::class, 'filesystem'); - $filesystem_reflection->setAccessible(true); $filesystem_reflection->setValue($this->messenger_queue, $filesystem); // Process the queue @@ -312,7 +311,6 @@ class phpbb_messenger_queue_test extends phpbb_test_case $filesystem->method('phpbb_chmod') ->will($this->throwException(new filesystem_exception('Chmod failed'))); $filesystem_reflection = new \ReflectionProperty(queue::class, 'filesystem'); - $filesystem_reflection->setAccessible(true); $filesystem_reflection->setValue($this->messenger_queue, $filesystem); $this->messenger_queue->save(); diff --git a/tests/migrator/get_callable_from_step_test.php b/tests/migrator/get_callable_from_step_test.php index 02ee53e172..467ec99aa8 100644 --- a/tests/migrator/get_callable_from_step_test.php +++ b/tests/migrator/get_callable_from_step_test.php @@ -137,7 +137,6 @@ class get_callable_from_step_test extends phpbb_database_test_case { $class = new ReflectionClass($this->migrator); $method = $class->getMethod('get_callable_from_step'); - $method->setAccessible(true); return $method->invokeArgs($this->migrator, array($step)); } } diff --git a/tests/notification/notification_method_email_test.php b/tests/notification/notification_method_email_test.php index 71ebffef89..0634e3abd4 100644 --- a/tests/notification/notification_method_email_test.php +++ b/tests/notification/notification_method_email_test.php @@ -126,7 +126,6 @@ class notification_method_email_test extends phpbb_tests_notification_base $class = new ReflectionClass($notification_method_email); $empty_queue_method = $class->getMethod('empty_queue'); - $empty_queue_method->setAccessible(true); $this->notification_method_email->method('notify_using_messenger') ->will($this->returnCallback(function () use ($notification_method_email, $empty_queue_method) { diff --git a/tests/notification/notification_method_webpush_test.php b/tests/notification/notification_method_webpush_test.php index a1b7e6325e..d2e4957912 100644 --- a/tests/notification/notification_method_webpush_test.php +++ b/tests/notification/notification_method_webpush_test.php @@ -680,7 +680,6 @@ class notification_method_webpush_test extends phpbb_tests_notification_base public function test_set_endpoint_padding($endpoint, $expected_padding): void { $web_push_reflection = new \ReflectionMethod($this->notification_method_webpush, 'set_endpoint_padding'); - $web_push_reflection->setAccessible(true); $auth = [ 'VAPID' => [ diff --git a/tests/template/extension_test.php b/tests/template/extension_test.php index 323c605fb9..c40a58da53 100644 --- a/tests/template/extension_test.php +++ b/tests/template/extension_test.php @@ -84,7 +84,6 @@ class phpbb_template_extension_test extends phpbb_template_template_test_case $class = new ReflectionClass('\phpbb\avatar\manager'); $enabled_drivers = $class->getProperty('enabled_drivers'); - $enabled_drivers->setAccessible(true); $enabled_drivers->setValue($class, false); $avatar_helper = new phpbb\avatar\helper( $config, diff --git a/tests/template/template_test_case.php b/tests/template/template_test_case.php index 3d3b560e5a..68a3a5985d 100644 --- a/tests/template/template_test_case.php +++ b/tests/template/template_test_case.php @@ -35,7 +35,6 @@ class phpbb_template_template_test_case extends phpbb_test_case $reflection = new ReflectionClass('\phpbb\language\language'); self::$language_reflection_lang = $reflection->getProperty('lang'); - self::$language_reflection_lang->setAccessible(true); } protected function display($handle) diff --git a/tests/template/twig_test.php b/tests/template/twig_test.php index f655cd8702..23a14b4b4f 100644 --- a/tests/template/twig_test.php +++ b/tests/template/twig_test.php @@ -128,7 +128,6 @@ class twig_test extends \phpbb_test_case // Get loader instance $template_reflection = new \ReflectionObject($this->template); $loader_reflection = $template_reflection->getProperty('loader'); - $loader_reflection->setAccessible(true); /** @var \phpbb\template\twig\loader $loader */ $loader = $loader_reflection->getValue($this->template); diff --git a/tests/text_reparser/plugins/post_text_test.php b/tests/text_reparser/plugins/post_text_test.php index 8e63ca7256..0333afd95b 100644 --- a/tests/text_reparser/plugins/post_text_test.php +++ b/tests/text_reparser/plugins/post_text_test.php @@ -74,7 +74,6 @@ class phpbb_textreparser_post_text_test extends phpbb_textreparser_test_row_base // Call reparse_record via reflection $reparser = $this->get_reparser(); $reparser_reflection = new \ReflectionMethod($reparser, 'reparse_record'); - $reparser_reflection->setAccessible(true); $reparser_reflection->invoke($reparser, $record); // Retrieve reparsed post text and compare with expectec diff --git a/tests/text_reparser/plugins/test_row_based_plugin.php b/tests/text_reparser/plugins/test_row_based_plugin.php index 60b3e30584..425054f4c1 100644 --- a/tests/text_reparser/plugins/test_row_based_plugin.php +++ b/tests/text_reparser/plugins/test_row_based_plugin.php @@ -27,7 +27,6 @@ abstract class phpbb_textreparser_test_row_based_plugin extends phpbb_database_t $reflection_reparser = new ReflectionClass(get_class($reparser)); $table_property = $reflection_reparser->getProperty('table'); - $table_property->setAccessible(true); $sql = 'SELECT ' . $columns['id'] . ' AS id, ' . $columns['text'] . ' AS text FROM ' . $table_property->getValue($reparser) . ' diff --git a/tests/ucp/controller_webpush_test.php b/tests/ucp/controller_webpush_test.php index e1e5373862..9539fa73dc 100644 --- a/tests/ucp/controller_webpush_test.php +++ b/tests/ucp/controller_webpush_test.php @@ -422,7 +422,6 @@ class test_ucp_controller_webpush_test extends phpbb_database_test_case $this->expectExceptionMessage('FORM_INVALID'); $check_subscribe_reflection = new ReflectionMethod($this->controller, 'check_subscribe_requests'); - $check_subscribe_reflection->setAccessible(true); $check_subscribe_reflection->invoke($this->controller); } @@ -436,7 +435,6 @@ class test_ucp_controller_webpush_test extends phpbb_database_test_case $this->expectExceptionMessage('NO_AUTH_OPERATION'); $check_subscribe_reflection = new ReflectionMethod($this->controller, 'check_subscribe_requests'); - $check_subscribe_reflection->setAccessible(true); $check_subscribe_reflection->invoke($this->controller); } diff --git a/tests/upload/filespec_test.php b/tests/upload/filespec_test.php index 032ab56803..ed20275783 100644 --- a/tests/upload/filespec_test.php +++ b/tests/upload/filespec_test.php @@ -83,7 +83,6 @@ class phpbb_filespec_test extends phpbb_test_case private function set_reflection_property($class, $property_name, $value) { $property = new ReflectionProperty($class, $property_name); - $property->setAccessible(true); $property->setValue($class, $value); } @@ -538,7 +537,6 @@ class phpbb_filespec_test extends phpbb_test_case $filespec = new \phpbb\files\filespec($this->filesystem, $this->language, new \bantu\IniGetWrapper\IniGetWrapper, new \FastImageSize\FastImageSize(), $this->phpbb_root_path, null); $reflection_filespec = new ReflectionClass($filespec); $plupload_property = $reflection_filespec->getProperty('plupload'); - $plupload_property->setAccessible(true); $plupload_mock = $this->getMockBuilder('\phpbb\plupload\plupload') ->disableOriginalConstructor() ->getMock(); From dac58f53d735e6bb41402c390bd2ac1192446f68 Mon Sep 17 00:00:00 2001 From: Matt Friedman Date: Tue, 16 Sep 2025 13:14:39 -0700 Subject: [PATCH 13/16] [ticket/17542] Optimize and simplify logic PHPBB-17542 --- tests/mock/event_dispatcher.php | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/tests/mock/event_dispatcher.php b/tests/mock/event_dispatcher.php index 654a08d7f1..2f0f142905 100644 --- a/tests/mock/event_dispatcher.php +++ b/tests/mock/event_dispatcher.php @@ -24,18 +24,13 @@ class phpbb_mock_event_dispatcher extends \phpbb\event\dispatcher public function trigger_event($eventName, $data = array()): array { - // Ensure tests never hard-exit when phpBB calls exit_handler() + $data = (array) $data; + if ($eventName === 'core.exit_handler') { - // Set the override flag so exit_handler() returns instead of exit; - if (is_array($data)) - { - $data['exit_handler_override'] = true; - } - return (array) $data; + $data['exit_handler_override'] = true; } - // Default behaviour of the mock: return the input data unchanged - return (array) $data; + return $data; } } From b2aa276a2a861d77259750faa0207e9a728e4f81 Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 16 Sep 2025 23:36:35 +0700 Subject: [PATCH 14/16] [ticket/17543] Fix more PHP 8.5 deprecation warnings PHPBB-17543 --- phpBB/includes/functions_posting.php | 2 -- phpBB/phpbb/captcha/plugins/recaptcha_v3.php | 2 +- .../db/doctrine/connection_parameter_factory.php | 13 ++++++++++++- phpBB/phpbb/notification/type/post.php | 2 +- phpBB/phpbb/search/backend/fulltext_native.php | 6 +++--- tests/profilefields/type_bool_test.php | 2 +- tests/profilefields/type_dropdown_test.php | 2 +- 7 files changed, 19 insertions(+), 10 deletions(-) diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index f4637c5057..9559c10cfd 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -763,8 +763,6 @@ function create_thumbnail($source, $destination, $mimetype) imagewebp($new_image, $destination); break; } - - imagedestroy($new_image); } else { diff --git a/phpBB/phpbb/captcha/plugins/recaptcha_v3.php b/phpBB/phpbb/captcha/plugins/recaptcha_v3.php index e8399a5aef..b62c561a67 100644 --- a/phpBB/phpbb/captcha/plugins/recaptcha_v3.php +++ b/phpBB/phpbb/captcha/plugins/recaptcha_v3.php @@ -325,7 +325,7 @@ class recaptcha_v3 extends captcha_abstract $token = $request->variable('recaptcha_token', '', true); $action = $request->variable('recaptcha_action', '', true); $action = in_array($action, self::$actions) ? $action : reset(self::$actions); - $threshold = (double) $config["recaptcha_v3_threshold_{$action}"] ?? 0.5; + $threshold = (float) $config["recaptcha_v3_threshold_{$action}"] ?? 0.5; // No token was provided, discard spam submissions if (empty($token)) diff --git a/phpBB/phpbb/db/doctrine/connection_parameter_factory.php b/phpBB/phpbb/db/doctrine/connection_parameter_factory.php index ea5a929ba7..30ee850138 100644 --- a/phpBB/phpbb/db/doctrine/connection_parameter_factory.php +++ b/phpBB/phpbb/db/doctrine/connection_parameter_factory.php @@ -150,7 +150,18 @@ class connection_parameter_factory if ($params['driver'] === 'pdo_mysql' && extension_loaded('pdo_mysql')) { - $params[\PDO::MYSQL_ATTR_FOUND_ROWS] = true; + // Constant PDO::MYSQL_ATTR_FOUND_ROWS is deprecated since 8.5, use Pdo\Mysql::ATTR_FOUND_ROWS instead + if (class_exists('\Pdo\Mysql')) + { + /** + * @psalm-suppress UndefinedClass + */ + $params[\Pdo\Mysql::ATTR_FOUND_ROWS] = true; + } + else + { + $params[\PDO::MYSQL_ATTR_FOUND_ROWS] = true; + } } return $params; diff --git a/phpBB/phpbb/notification/type/post.php b/phpBB/phpbb/notification/type/post.php index be8c8d75e9..9052f6cbcf 100644 --- a/phpBB/phpbb/notification/type/post.php +++ b/phpBB/phpbb/notification/type/post.php @@ -386,7 +386,7 @@ class post extends \phpbb\notification\type\base // Topics can be "read" before they are public (while awaiting approval). // Make sure that if the user has read the topic, it's marked as read in the notification - if ($this->inherit_read_status && isset($pre_create_data[$this->user_id]) && $pre_create_data[$this->user_id] >= $this->notification_time) + if ($this->inherit_read_status && isset($this->user_id, $pre_create_data[$this->user_id]) && $pre_create_data[$this->user_id] >= $this->notification_time) { $this->notification_read = true; } diff --git a/phpBB/phpbb/search/backend/fulltext_native.php b/phpBB/phpbb/search/backend/fulltext_native.php index 95efc38e43..7416544a36 100644 --- a/phpBB/phpbb/search/backend/fulltext_native.php +++ b/phpBB/phpbb/search/backend/fulltext_native.php @@ -1577,7 +1577,7 @@ class fulltext_native extends base implements search_backend_interface // Remove common words if ($this->config['num_posts'] >= 100 && $this->config['fulltext_native_common_thres']) { - $common_threshold = ((double) $this->config['fulltext_native_common_thres']) / 100.0; + $common_threshold = ((float) $this->config['fulltext_native_common_thres']) / 100.0; // First, get the IDs of common words $sql = 'SELECT word_id, word_text FROM ' . $this->search_wordlist_table . ' @@ -2034,14 +2034,14 @@ class fulltext_native extends base implements search_backend_interface

' . $this->language->lang('COMMON_WORD_THRESHOLD_EXPLAIN') . '
-
%
+
%
'; // These are fields required in the config table return array( 'tpl' => $tpl, - 'config' => array('fulltext_native_load_upd' => 'bool', 'fulltext_native_min_chars' => 'integer:0:255', 'fulltext_native_max_chars' => 'integer:0:255', 'fulltext_native_common_thres' => 'double:0:100') + 'config' => array('fulltext_native_load_upd' => 'bool', 'fulltext_native_min_chars' => 'integer:0:255', 'fulltext_native_max_chars' => 'integer:0:255', 'fulltext_native_common_thres' => 'float:0:100') ); } } diff --git a/tests/profilefields/type_bool_test.php b/tests/profilefields/type_bool_test.php index 49bc45805a..f102badb31 100644 --- a/tests/profilefields/type_bool_test.php +++ b/tests/profilefields/type_bool_test.php @@ -187,7 +187,7 @@ class phpbb_profilefield_type_bool_test extends phpbb_test_case public function is_set_callback($field_id, $lang_id, $field_value) { - return isset($this->options[$field_value]); + return isset($field_value, $this->options[$field_value]); } public function get($field_id, $lang_id, $field_value) diff --git a/tests/profilefields/type_dropdown_test.php b/tests/profilefields/type_dropdown_test.php index 17e1a7b3f9..9e979b80e2 100644 --- a/tests/profilefields/type_dropdown_test.php +++ b/tests/profilefields/type_dropdown_test.php @@ -225,7 +225,7 @@ class phpbb_profilefield_type_dropdown_test extends phpbb_test_case public function is_set_callback($field_id, $lang_id, $field_value) { - return isset($this->dropdown_options[$field_value]); + return isset($field_value, $this->dropdown_options[$field_value]); } public function get($field_id, $lang_id, $field_value) From f670231faa7676fa7bb516dd8e53b4586a0c0de9 Mon Sep 17 00:00:00 2001 From: rxu Date: Wed, 17 Sep 2025 21:56:54 +0700 Subject: [PATCH 15/16] [ticket/17543] Adjust PHPUnit XML configuration Define source code directories to test and restrict reporting of deprecation errors to them only to avoid getting this kind of errors from the 3rd party software and temporary/cache files. PHPBB-17543 --- .github/phpunit-mariadb-github.xml | 12 ++++++++++++ .github/phpunit-mssql-github.xml | 12 ++++++++++++ .github/phpunit-mysql-github.xml | 12 ++++++++++++ .github/phpunit-postgres-github.xml | 12 ++++++++++++ .github/phpunit-psql-windows-github.xml | 12 ++++++++++++ .github/phpunit-sqlite3-github.xml | 12 ++++++++++++ phpunit.xml.dist | 12 +++++++++--- 7 files changed, 81 insertions(+), 3 deletions(-) diff --git a/.github/phpunit-mariadb-github.xml b/.github/phpunit-mariadb-github.xml index e301ced053..d5ab282b3d 100644 --- a/.github/phpunit-mariadb-github.xml +++ b/.github/phpunit-mariadb-github.xml @@ -23,6 +23,18 @@ slow + + + ../phpBB/ + ../tests/ + + + ../phpBB/vendor/ + ../phpBB/cache/ + ../phpBB/develop/ + ../phpBB/store/ + + diff --git a/.github/phpunit-mssql-github.xml b/.github/phpunit-mssql-github.xml index b3061cce0e..bd240fa534 100644 --- a/.github/phpunit-mssql-github.xml +++ b/.github/phpunit-mssql-github.xml @@ -23,6 +23,18 @@ slow + + + ../phpBB/ + ../tests/ + + + ../phpBB/vendor/ + ../phpBB/cache/ + ../phpBB/develop/ + ../phpBB/store/ + + diff --git a/.github/phpunit-mysql-github.xml b/.github/phpunit-mysql-github.xml index e15519e8b2..ff42cf36df 100644 --- a/.github/phpunit-mysql-github.xml +++ b/.github/phpunit-mysql-github.xml @@ -23,6 +23,18 @@ slow + + + ../phpBB/ + ../tests/ + + + ../phpBB/vendor/ + ../phpBB/cache/ + ../phpBB/develop/ + ../phpBB/store/ + + diff --git a/.github/phpunit-postgres-github.xml b/.github/phpunit-postgres-github.xml index 57333dacc5..1636901039 100644 --- a/.github/phpunit-postgres-github.xml +++ b/.github/phpunit-postgres-github.xml @@ -23,6 +23,18 @@ slow + + + ../phpBB/ + ../tests/ + + + ../phpBB/vendor/ + ../phpBB/cache/ + ../phpBB/develop/ + ../phpBB/store/ + + diff --git a/.github/phpunit-psql-windows-github.xml b/.github/phpunit-psql-windows-github.xml index ab0c060010..0b80da0774 100644 --- a/.github/phpunit-psql-windows-github.xml +++ b/.github/phpunit-psql-windows-github.xml @@ -23,6 +23,18 @@ slow + + + ../phpBB/ + ../tests/ + + + ../phpBB/vendor/ + ../phpBB/cache/ + ../phpBB/develop/ + ../phpBB/store/ + + diff --git a/.github/phpunit-sqlite3-github.xml b/.github/phpunit-sqlite3-github.xml index 5c7e931b48..1ade12292c 100644 --- a/.github/phpunit-sqlite3-github.xml +++ b/.github/phpunit-sqlite3-github.xml @@ -23,6 +23,18 @@ slow + + + ../phpBB/ + ../tests/ + + + ../phpBB/vendor/ + ../phpBB/cache/ + ../phpBB/develop/ + ../phpBB/store/ + + diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 58d0d5c1df..6240baa320 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -26,10 +26,16 @@ slow - + - ./phpBB/includes/ - ./phpBB/phpbb/ + ./phpBB/ + ./tests/ + + ./phpBB/vendor/ + ./phpBB/cache/ + ./phpBB/develop/ + ./phpBB/store/ + From e74521a3cf231fb1600fe39bc658da83d2e8431a Mon Sep 17 00:00:00 2001 From: rxu Date: Wed, 17 Sep 2025 22:15:47 +0700 Subject: [PATCH 16/16] [ticket/17543] Enable bz2 and fileinfo PHP extensions for Windows tests PHPBB-17543 --- .github/workflows/tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4a021cd1b4..2b1b5703d1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -522,7 +522,7 @@ jobs: uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} - extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, intl, gd, exif, iconv, pgsql, pdo_pgsql, sodium + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, intl, gd, exif, iconv, pgsql, pdo_pgsql, sodium, bz2, fileinfo ini-values: upload_tmp_dir=${{ runner.temp }}, sys_temp_dir=${{ runner.temp }} coverage: none