diff --git a/CHANGELOG-6.3.md b/CHANGELOG-6.3.md index a7490b8179172..d53b170cca7a1 100644 --- a/CHANGELOG-6.3.md +++ b/CHANGELOG-6.3.md @@ -7,6 +7,16 @@ in 6.3 minor versions. To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v6.3.0...v6.3.1 +* 6.3.10 (2023-12-01) + + * bug #52804 [Serializer] Fix support of plain object types denormalization (andersonamuller) + * bug #52845 [Routing] Restore aliases removal in RouteCollection::remove() (fancyweb) + * bug #52846 [PhpUnitBridge]  run composer update for compatibility with PHPUnit versions shipping composer.lock (xabbuh) + * bug #52823 add parameter types in query builder (javiercno) + * bug #52808 [DependencyInjection] Fix dumping containers with null-referenced services (nicolas-grekas) + * bug #52797 [VarExporter] Fix lazy ghost trait when using nullsafe operator (nicolas-grekas) + * bug #52806 [Routing] Fix removing aliases pointing to removed route in `RouteCollection::remove()` (fancyweb) + * 6.3.9 (2023-11-29) * bug #52786 [Serializer] Revert allowed attributes fix (mtarld) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index b7f58c00c8501..ce074d555f730 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -6,45 +6,45 @@ Symfony is the result of the work of many people who made the code better. The Symfony Connect username in parenthesis allows to get more information - Fabien Potencier (fabpot) - Nicolas Grekas (nicolas-grekas) - - Christian Flothmann (xabbuh) - Alexander M. Turek (derrabus) + - Christian Flothmann (xabbuh) - Bernhard Schussek (bschussek) - Robin Chalas (chalas_r) - Tobias Schultze (tobion) - Grégoire Pineau (lyrixx) - Thomas Calvet (fancyweb) - Christophe Coevoet (stof) - - Jordi Boggiano (seldaek) - Wouter de Jong (wouterj) + - Jordi Boggiano (seldaek) - Maxime Steinhausser (ogizanagi) - Kévin Dunglas (dunglas) - Victor Berchet (victor) - Ryan Weaver (weaverryan) - - Jérémy DERUSSÉ (jderusse) + - Alexandre Daubois (alexandre-daubois) - Javier Eguiluz (javier.eguiluz) + - Jérémy DERUSSÉ (jderusse) - Roland Franssen + - Jules Pietri (heah) - Johannes S (johannes) - Kris Wallsmith (kriswallsmith) - Jakub Zalas (jakubzalas) - - Alexandre Daubois (alexandre-daubois) - - Jules Pietri (heah) - Oskar Stark (oskarstark) - Yonel Ceruto (yonelceruto) - Hugo Hamon (hhamon) - Tobias Nyholm (tobias) - Samuel ROZE (sroze) - Pascal Borreli (pborreli) + - Jérôme Tamarelle (gromnan) - Romain Neutron + - Antoine Lamirault (alamirault) - Joseph Bielawski (stloyd) - Drak (drak) - Abdellatif Ait boudad (aitboudad) - - Jérôme Tamarelle (gromnan) - Lukas Kahwe Smith (lsmith) - - Antoine Lamirault (alamirault) - - Hamza Amrouche (simperfit) - Kevin Bond (kbond) - - Martin Hasoň (hason) - HypeMC (hypemc) + - Hamza Amrouche (simperfit) + - Martin Hasoň (hason) - Jeremy Mikola (jmikola) - Jean-François Simon (jfsimon) - Benjamin Eberlei (beberlei) @@ -72,26 +72,27 @@ The Symfony Connect username in parenthesis allows to get more information - Bulat Shakirzyanov (avalanche123) - Iltar van der Berg - Miha Vrhovnik (mvrhov) + - Gary PEGEOT (gary-p) - Saša Stamenković (umpirsky) + - Vincent Langlet (deviling) + - Allison Guilhem (a_guilhem) - Mathieu Piot (mpiot) - Alexander Schranz (alexander-schranz) - Vasilij Duško (staff) - - Vincent Langlet (deviling) + - Mathieu Santostefano (welcomattic) - Sarah Khalil (saro0h) - Laurent VOULLEMIER (lvo) - Konstantin Kudryashov (everzet) - Guilhem N (guilhemn) - Bilal Amarni (bamarni) - Eriksen Costa - - Gary PEGEOT (gary-p) - - Mathieu Santostefano (welcomattic) - Florin Patan (florinpatan) - Vladimir Reznichenko (kalessil) - Peter Rehm (rpet) - Henrik Bjørnskov (henrikbjorn) - - Allison Guilhem (a_guilhem) - Andrej Hudec (pulzarraider) - Jáchym Toušek (enumag) + - Mathias Arlaud (mtarld) - David Buchmann (dbu) - Dariusz Ruminski - Christian Raue @@ -103,6 +104,8 @@ The Symfony Connect username in parenthesis allows to get more information - Alex Pott - Fran Moreno (franmomu) - Arnout Boks (aboks) + - Frank A. Fiebig (fafiebig) + - Baldini - Charles Sarrazin (csarrazi) - Ruud Kamphuis (ruudk) - Henrik Westphal (snc) @@ -114,7 +117,6 @@ The Symfony Connect username in parenthesis allows to get more information - Brandon Turner - Luis Cordova (cordoval) - Antoine Makdessi (amakdessi) - - Mathias Arlaud (mtarld) - Konstantin Myakshin (koc) - Daniel Holmes (dholmes) - Julien Falque (julienfalque) @@ -134,14 +136,14 @@ The Symfony Connect username in parenthesis allows to get more information - Joel Wurtz (brouznouf) - Sebastiaan Stok (sstok) - Maxime STEINHAUSSER - - Frank A. Fiebig (fafiebig) - gnito-org - - Baldini + - Jeroen Spee (jeroens) - Tim Nagel (merk) - Chris Wilkinson (thewilkybarkid) - Jérôme Vasseur (jvasseur) - Peter Kokot (peterkokot) - Brice BERNARD (brikou) + - Simon André (simonandre) - Michal Piotrowski - marc.weistroff - Rokas Mikalkėnas (rokasm) @@ -149,9 +151,8 @@ The Symfony Connect username in parenthesis allows to get more information - lenar - Jacob Dreesen (jdreesen) - Włodzimierz Gajda (gajdaw) - - Simon André (simonandre) - Adrien Brault (adrienbrault) - - Jeroen Spee (jeroens) + - Tac Tacelosky (tacman1123) - Théo FIDRY - Florian Voutzinos (florianv) - Teoh Han Hui (teohhanhui) @@ -159,8 +160,10 @@ The Symfony Connect username in parenthesis allows to get more information - Colin Frei - Javier Spagnoletti (phansys) - excelwebzone + - Vladimir Tsykun (vtsykun) - Paráda József (paradajozsef) - Baptiste Clavié (talus) + - Martin Auswöger - Alexander Schwenn (xelaris) - Fabien Pennequin (fabienpennequin) - Gordon Franke (gimler) @@ -190,6 +193,7 @@ The Symfony Connect username in parenthesis allows to get more information - Jonathan Scheiber (jmsche) - Daniel Gomes (danielcsgomes) - Hidenori Goto (hidenorigoto) + - Niels Keurentjes (curry684) - Arnaud Kleinpeter (nanocom) - Guilherme Blanco (guilhermeblanco) - Saif Eddin Gmati (azjezz) @@ -216,7 +220,6 @@ The Symfony Connect username in parenthesis allows to get more information - Sokolov Evgeniy (ewgraf) - Andréia Bohner (andreia) - Tom Van Looy (tvlooy) - - Niels Keurentjes (curry684) - Vyacheslav Pavlov - Albert Casademont (acasademont) - George Mponos (gmponos) @@ -229,6 +232,7 @@ The Symfony Connect username in parenthesis allows to get more information - Vincent Touzet (vincenttouzet) - Olivier Dolbeau (odolbeau) - Rouven Weßling (realityking) + - Valtteri R (valtzu) - Ben Davies (bendavies) - YaFou - Clemens Tolboom @@ -237,7 +241,6 @@ The Symfony Connect username in parenthesis allows to get more information - Alessandro Lai (jean85) - 77web - Gocha Ossinkine (ossinkine) - - Martin Auswöger - Jesse Rushlow (geeshoe) - Matthieu Ouellette-Vachon (maoueh) - Michał Pipa (michal.pipa) @@ -252,25 +255,23 @@ The Symfony Connect username in parenthesis allows to get more information - Roland Franssen :) - GDIBass - Samuel NELA (snela) - - Tac Tacelosky (tacman1123) - Vincent AUBERT (vincent) - Fabien Bourigault (fbourigault) - Michael Voříšek - zairig imad (zairigimad) - Colin O'Dell (colinodell) - Sébastien Alfaiate (seb33300) - - Valtteri R (valtzu) - James Halsall (jaitsu) - Christian Scheb - Guillaume (guill) - Mikael Pajunen - Warnar Boekkooi (boekkooi) - Justin Hileman (bobthecow) + - Tomasz Kowalczyk (thunderer) - Anthony GRASSIOT (antograssiot) - Dmitrii Chekaliuk (lazyhammer) - Clément JOBEILI (dator) - Andreas Möller (localheinz) - - Vladimir Tsykun (vtsykun) - Marek Štípek (maryo) - Daniel Espendiller - Arnaud PETITPAS (apetitpa) @@ -341,7 +342,6 @@ The Symfony Connect username in parenthesis allows to get more information - Marcin Sikoń (marphi) - Michele Orselli (orso) - Sven Paulus (subsven) - - Tomasz Kowalczyk (thunderer) - Daniel Burger - Maxime Veber (nek-) - Bastien Jaillot (bastnic) @@ -365,6 +365,7 @@ The Symfony Connect username in parenthesis allows to get more information - Florent Morselli (spomky_) - dFayet - Rob Frawley 2nd (robfrawley) + - Bram Leeda (bram123) - Nikita Konstantinov (unkind) - Dariusz - Francois Zaninotto @@ -413,6 +414,7 @@ The Symfony Connect username in parenthesis allows to get more information - Jurica Vlahoviček (vjurica) - Bob den Otter (bopp) - Thomas Schulz (king2500) + - Dariusz Rumiński - Philippe SEGATORI (tigitz) - Frank de Jonge - Dane Powell @@ -472,6 +474,7 @@ The Symfony Connect username in parenthesis allows to get more information - Warxcell (warxcell) - Atsuhiro KUBO (iteman) - rudy onfroy (ronfroy) + - Marvin Petker - Serkan Yildiz (srknyldz) - Andrew Moore (finewolf) - Bertrand Zuchuat (garfield-fr) @@ -503,7 +506,6 @@ The Symfony Connect username in parenthesis allows to get more information - janschoenherr - Emanuele Gaspari (inmarelibero) - Marko Kaznovac (kaznovac) - - Dariusz Rumiński - Andrii Bodnar - Artem (artemgenvald) - Thierry T (lepiaf) @@ -515,6 +517,7 @@ The Symfony Connect username in parenthesis allows to get more information - Ahmed Raafat - Philippe Segatori - Thibaut Cheymol (tcheymol) + - Herberto Graca - Erin Millard - Matthew Lewinski (lewinski) - Islam Israfilov (islam93) @@ -535,6 +538,7 @@ The Symfony Connect username in parenthesis allows to get more information - Dmytro Borysovskyi (dmytr0) - Johann Pardanaud - Pavel Kirpitsov (pavel-kirpichyov) + - Robert Meijers - Artur Eshenbrener - Harm van Tilborg (hvt) - Thomas Perez (scullwm) @@ -676,13 +680,13 @@ The Symfony Connect username in parenthesis allows to get more information - Toni Rudolf (toooni) - Stefan Gehrig (sgehrig) - vagrant + - Matthias Krauser (mkrauser) - Benjamin Cremer (bcremer) - Maarten de Boer (mdeboer) - Asier Illarramendi (doup) - AKeeman (akeeman) - Martijn Cuppens - Restless-ET - - Robert Meijers - Vlad Gregurco (vgregurco) - Artem Stepin (astepin) - Boris Vujicic (boris.vujicic) @@ -945,7 +949,6 @@ The Symfony Connect username in parenthesis allows to get more information - EStyles (insidestyles) - Christophe Villeger (seragan) - Krystian Marcisz (simivar) - - Matthias Krauser (mkrauser) - Julien Fredon - Xavier Leune (xleune) - Hany el-Kerdany @@ -1192,6 +1195,7 @@ The Symfony Connect username in parenthesis allows to get more information - John Bohn (jbohn) - Jason Tan (jt2k) - Edvin Hultberg + - shubhalgupta - Felds Liscia (felds) - Sergey Panteleev - Andrew Hilobok (hilobok) @@ -1368,6 +1372,7 @@ The Symfony Connect username in parenthesis allows to get more information - Emil Einarsson - 243083df - Thibault Duplessis + - katario - Rimas Kudelis - Marc Abramowitz - Matthias Schmidt @@ -1827,7 +1832,6 @@ The Symfony Connect username in parenthesis allows to get more information - Matthias Neid - Yannick - Kuzia - - Bram Leeda - Vladimir Luchaninov (luchaninov) - spdionis - maxime.perrimond @@ -1841,6 +1845,7 @@ The Symfony Connect username in parenthesis allows to get more information - Dmitry Derepko - Rémi Leclerc - Jan Vernarsky + - Ionut Cioflan - Sergio - Jonas Hünig - Mehrdad @@ -1852,6 +1857,7 @@ The Symfony Connect username in parenthesis allows to get more information - Jan Walther (janwalther) - Juan Miguel Besada Vidal (soutlink) - Takashi Kanemoto (ttskch) + - Aleksei Lebedev - dlorek - Stuart Fyfe - Jason Schilling (chapterjason) @@ -1982,6 +1988,7 @@ The Symfony Connect username in parenthesis allows to get more information - Tobias Feijten (tobias93) - mohammadreza honarkhah - Jessica F Martinez + - paullallier - Artem Oliinyk (artemoliynyk) - Andrea Quintino (dirk39) - Andreas Heigl (heiglandreas) @@ -2231,8 +2238,10 @@ The Symfony Connect username in parenthesis allows to get more information - Michael Olšavský - Jay Severson - Benny Born + - Vincent Vermeulen - Stefan Moonen - Emirald Mateli + - Robert - René Kerner - Nathaniel Catchpole - upchuk @@ -2305,6 +2314,7 @@ The Symfony Connect username in parenthesis allows to get more information - rkerner - Alex Silcock - Raphael Hardt + - Ivan Nemets - Qingshan Luo - Ergie Gonzaga - Matthew J Mucklo @@ -2452,6 +2462,7 @@ The Symfony Connect username in parenthesis allows to get more information - Martin Schophaus (m_schophaus_adcada) - Martynas Sudintas (martiis) - Anton Sukhachev (mrsuh) + - Pavlo Pelekh (pelekh) - Stefan Kleff (stefanxl) - Thijs-jan Veldhuizen (tjveldhuizen) - Vitaliy Zhuk (zhukv) @@ -2707,6 +2718,7 @@ The Symfony Connect username in parenthesis allows to get more information - Rénald Casagraude (rcasagraude) - Robin Duval (robin-duval) - Mohammad Ali Sarbanha (sarbanha) + - Sergii Dolgushev (sergii-swds) - Steeve Titeca (stiteca) - Artem Lopata (bumz) - alex @@ -2781,6 +2793,7 @@ The Symfony Connect username in parenthesis allows to get more information - Chansig - Tischoi - divinity76 + - vdauchy - Andreas Hasenack - J Bruni - Alexey Prilipko @@ -2827,6 +2840,7 @@ The Symfony Connect username in parenthesis allows to get more information - Vladimir Sadicov (xtech) - Marcel Berteler - sdkawata + - Frederik Schmitt - Peter van Dommelen - Tim van Densen - Andrzej @@ -3148,6 +3162,7 @@ The Symfony Connect username in parenthesis allows to get more information - Tema Yud - Matt Fields - Olatunbosun Egberinde + - Johannes - Andras Debreczeni - Knallcharge - Vladimir Sazhin @@ -3360,6 +3375,7 @@ The Symfony Connect username in parenthesis allows to get more information - Lin Lu - arduanov - sualko + - Marc Bennewitz - Fabien - Martin Komischke - Yendric diff --git a/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit.php b/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit.php index f928c87139fe6..b7967deffa998 100644 --- a/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit.php +++ b/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit.php @@ -265,7 +265,7 @@ putenv("COMPOSER_ROOT_VERSION=$PHPUNIT_VERSION.99"); $q = '\\' === \DIRECTORY_SEPARATOR && \PHP_VERSION_ID < 80000 ? '"' : ''; // --no-suggest is not in the list to keep compat with composer 1.0, which is shipped with Ubuntu 16.04LTS - $exit = proc_close(proc_open("$q$COMPOSER install --no-dev --prefer-dist --no-progress $q", [], $p, getcwd())); + $exit = proc_close(proc_open("$q$COMPOSER update --no-dev --prefer-dist --no-progress $q", [], $p, getcwd())); putenv('COMPOSER_ROOT_VERSION'.(false !== $prevRoot ? '='.$prevRoot : '')); if ($prevCacheDir) { putenv("COMPOSER_CACHE_DIR=$prevCacheDir"); diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 38270e16b0e38..8867369b2f4d2 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -259,6 +259,7 @@ public function dump(array $options = []): string|array docStar} diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10_as_files.txt b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10_as_files.txt index 25d0b3257f0d9..2c8a6d23174eb 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10_as_files.txt +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10_as_files.txt @@ -13,6 +13,7 @@ return [ namespace Container%s; use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Exception\RuntimeException; /** diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt index c3fddf9e67175..f8f5f78b1fb56 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_as_files.txt @@ -23,6 +23,7 @@ return [ namespace Container%s; use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Exception\RuntimeException; /** diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_deprecated_parameters_as_files.txt b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_deprecated_parameters_as_files.txt index 98476a4c1a171..d0c7c96e6206f 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_deprecated_parameters_as_files.txt +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_deprecated_parameters_as_files.txt @@ -5,6 +5,7 @@ Array namespace Container%s; use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Exception\RuntimeException; /** diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt index fd9d7b20c4002..10e92ce468aee 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy_as_files.txt @@ -5,6 +5,7 @@ Array namespace Container%s; use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Exception\RuntimeException; /** diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services14.xml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services14.xml index bad2ec0ab377c..cc0310ceb2931 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services14.xml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services14.xml @@ -3,10 +3,6 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd"> - - app - - diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php index abda1a6c071f2..68bedaa0d04fb 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php @@ -14,6 +14,7 @@ use Symfony\Component\Form\ChoiceList\View\ChoiceView; use Symfony\Component\Form\FormError; use Symfony\Component\Form\FormInterface; +use Symfony\Component\Intl\Intl; use Symfony\Component\Intl\Util\IntlTestHelper; use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException; @@ -91,6 +92,10 @@ public function testSubmitFromSingleTextDateTime() // we test against "de_DE", so we need the full implementation IntlTestHelper::requireFullIntl($this, false); + if ('71.1' === Intl::getIcuVersion()) { + $this->markTestSkipped('Skipping test due to a bug in ICU 71.1.'); + } + \Locale::setDefault('de_DE'); $form = $this->factory->create(static::TESTED_TYPE, null, [ @@ -113,6 +118,10 @@ public function testSubmitFromSingleTextDateTimeImmutable() // we test against "de_DE", so we need the full implementation IntlTestHelper::requireFullIntl($this, false); + if ('71.1' === Intl::getIcuVersion()) { + $this->markTestSkipped('Skipping test due to a bug in ICU 71.1.'); + } + \Locale::setDefault('de_DE'); $form = $this->factory->create(static::TESTED_TYPE, null, [ @@ -136,6 +145,10 @@ public function testSubmitFromSingleTextString() // we test against "de_DE", so we need the full implementation IntlTestHelper::requireFullIntl($this, false); + if ('71.1' === Intl::getIcuVersion()) { + $this->markTestSkipped('Skipping test due to a bug in ICU 71.1.'); + } + \Locale::setDefault('de_DE'); $form = $this->factory->create(static::TESTED_TYPE, null, [ @@ -158,6 +171,10 @@ public function testSubmitFromSingleTextTimestamp() // we test against "de_DE", so we need the full implementation IntlTestHelper::requireFullIntl($this, false); + if ('71.1' === Intl::getIcuVersion()) { + $this->markTestSkipped('Skipping test due to a bug in ICU 71.1.'); + } + \Locale::setDefault('de_DE'); $form = $this->factory->create(static::TESTED_TYPE, null, [ @@ -182,6 +199,10 @@ public function testSubmitFromSingleTextRaw() // we test against "de_DE", so we need the full implementation IntlTestHelper::requireFullIntl($this, false); + if ('71.1' === Intl::getIcuVersion()) { + $this->markTestSkipped('Skipping test due to a bug in ICU 71.1.'); + } + \Locale::setDefault('de_DE'); $form = $this->factory->create(static::TESTED_TYPE, null, [ diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index 41f48a3a56d29..f7b33bab29be8 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -76,11 +76,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ private static array $freshCache = []; - public const VERSION = '6.3.9'; - public const VERSION_ID = 60309; + public const VERSION = '6.3.10'; + public const VERSION_ID = 60310; public const MAJOR_VERSION = 6; public const MINOR_VERSION = 3; - public const RELEASE_VERSION = 9; + public const RELEASE_VERSION = 10; public const EXTRA_VERSION = ''; public const END_OF_MAINTENANCE = '01/2024'; diff --git a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php index 45f01946d63c0..d596bd1c99284 100644 --- a/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php +++ b/src/Symfony/Component/Messenger/Bridge/Doctrine/Transport/Connection.php @@ -183,7 +183,7 @@ public function get(): ?array if ($this->driverConnection->getDatabasePlatform() instanceof OraclePlatform) { $query = $this->createQueryBuilder('w') ->where('w.id IN ('.str_replace('SELECT a.* FROM', 'SELECT a.id FROM', $sql).')') - ->setParameters($query->getParameters()); + ->setParameters($query->getParameters(), $query->getParameterTypes()); if (method_exists(QueryBuilder::class, 'forUpdate')) { $query->forUpdate(); diff --git a/src/Symfony/Component/Routing/RouteCollection.php b/src/Symfony/Component/Routing/RouteCollection.php index f244e62bed344..27c25615b4afe 100644 --- a/src/Symfony/Component/Routing/RouteCollection.php +++ b/src/Symfony/Component/Routing/RouteCollection.php @@ -147,9 +147,24 @@ public function get(string $name): ?Route */ public function remove(string|array $name) { + $routes = []; foreach ((array) $name as $n) { + if (isset($this->routes[$n])) { + $routes[] = $n; + } + unset($this->routes[$n], $this->priorities[$n], $this->aliases[$n]); } + + if (!$routes) { + return; + } + + foreach ($this->aliases as $k => $alias) { + if (\in_array($alias->getId(), $routes, true)) { + unset($this->aliases[$k]); + } + } } /** diff --git a/src/Symfony/Component/Routing/Tests/RouteCollectionTest.php b/src/Symfony/Component/Routing/Tests/RouteCollectionTest.php index a191c88a61849..7625bcf54ebdb 100644 --- a/src/Symfony/Component/Routing/Tests/RouteCollectionTest.php +++ b/src/Symfony/Component/Routing/Tests/RouteCollectionTest.php @@ -219,17 +219,22 @@ public function testGet() public function testRemove() { $collection = new RouteCollection(); - $collection->add('foo', $foo = new Route('/foo')); + $collection->add('foo', new Route('/foo')); $collection1 = new RouteCollection(); $collection1->add('bar', $bar = new Route('/bar')); $collection->addCollection($collection1); $collection->add('last', $last = new Route('/last')); + $collection->addAlias('alias_removed_when_removing_route_foo', 'foo'); + $collection->addAlias('alias_directly_removed', 'bar'); $collection->remove('foo'); $this->assertSame(['bar' => $bar, 'last' => $last], $collection->all(), '->remove() can remove a single route'); + $collection->remove('alias_directly_removed'); + $this->assertNull($collection->getAlias('alias_directly_removed')); $collection->remove(['bar', 'last']); $this->assertSame([], $collection->all(), '->remove() accepts an array and can remove multiple routes at once'); + $this->assertNull($collection->getAlias('alias_removed_when_removing_route_foo')); } public function testSetHost() diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index 34068030bb2d3..6567c8869be67 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -547,7 +547,7 @@ private function validateAndDenormalize(array $types, string $currentClass, stri $expectedTypes[Type::BUILTIN_TYPE_OBJECT === $builtinType && $class ? $class : $builtinType] = true; - if (Type::BUILTIN_TYPE_OBJECT === $builtinType) { + if (Type::BUILTIN_TYPE_OBJECT === $builtinType && null !== $class) { if (!$this->serializer instanceof DenormalizerInterface) { throw new LogicException(sprintf('Cannot denormalize attribute "%s" for class "%s" because injected serializer is not a denormalizer.', $attribute, $class)); } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index 16ed0c2dd812c..fa34dcf20ef67 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -122,6 +122,17 @@ public function testDenormalizeWithExtraAttributesAndNoGroupsWithMetadataFactory ); } + public function testDenormalizePlainObject() + { + $extractor = new PhpDocExtractor(); + $normalizer = new ObjectNormalizer(null, null, null, $extractor); + $dummy = $normalizer->denormalize(['plainObject' => (object) ['foo' => 'bar']], DummyWithPlainObject::class); + + $this->assertInstanceOf(DummyWithPlainObject::class, $dummy); + $this->assertInstanceOf(\stdClass::class, $dummy->plainObject); + $this->assertSame('bar', $dummy->plainObject->foo); + } + public function testDenormalizeWithDuplicateNestedAttributes() { $this->expectException(LogicException::class); @@ -1145,6 +1156,12 @@ protected function setAttributeValue(object $object, string $attribute, $value, } } +class DummyWithPlainObject +{ + /** @var object */ + public $plainObject; +} + class ObjectWithBasicProperties { /** @var bool */ diff --git a/src/Symfony/Component/VarExporter/LazyGhostTrait.php b/src/Symfony/Component/VarExporter/LazyGhostTrait.php index cd2dc71da879c..f875a0d2e1c53 100644 --- a/src/Symfony/Component/VarExporter/LazyGhostTrait.php +++ b/src/Symfony/Component/VarExporter/LazyGhostTrait.php @@ -175,8 +175,9 @@ public function &__get($name): mixed if ($state && (null === $scope || isset($propertyScopes["\0$scope\0$name"]))) { if (LazyObjectState::STATUS_INITIALIZED_FULL === $state->status) { // Work around php/php-src#12695 - $property = $propertyScopes[null === $scope ? $name : "\0$scope\0$name"][3] - ?? (Hydrator::$propertyScopes[$this::class] = Hydrator::getPropertyScopes($this::class))[3]; + $property = null === $scope ? $name : "\0$scope\0$name"; + $property = $propertyScopes[$property][3] + ?? Hydrator::$propertyScopes[$this::class][$property][3] = new \ReflectionProperty($scope ?? $class, $name); } else { $property = null; } diff --git a/src/Symfony/Component/VarExporter/Tests/Fixtures/LazyGhost/ChildMagicClass.php b/src/Symfony/Component/VarExporter/Tests/Fixtures/LazyGhost/ChildMagicClass.php index 6cac9ffc03d01..ca6b235eba66d 100644 --- a/src/Symfony/Component/VarExporter/Tests/Fixtures/LazyGhost/ChildMagicClass.php +++ b/src/Symfony/Component/VarExporter/Tests/Fixtures/LazyGhost/ChildMagicClass.php @@ -18,5 +18,14 @@ class ChildMagicClass extends MagicClass implements LazyObjectInterface { use LazyGhostTrait; + private const LAZY_OBJECT_PROPERTY_SCOPES = [ + "\0".self::class."\0".'data' => [self::class, 'data', null], + "\0".self::class."\0".'lazyObjectState' => [self::class, 'lazyObjectState', null], + "\0".parent::class."\0".'data' => [parent::class, 'data', null], + 'cloneCounter' => [self::class, 'cloneCounter', null], + 'data' => [self::class, 'data', null], + 'lazyObjectState' => [self::class, 'lazyObjectState', null], + ]; + private int $data = 123; }