diff --git a/CHANGELOG-4.4.md b/CHANGELOG-4.4.md
index c16001b9e6c21..a265a13db9965 100644
--- a/CHANGELOG-4.4.md
+++ b/CHANGELOG-4.4.md
@@ -7,6 +7,17 @@ in 4.4 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/v4.4.0...v4.4.1
+* 4.4.48 (2022-10-28)
+
+ * bug #47907 [Console] Update Application.php (aleksandr-shevchenko)
+ * bug #47932 Throw LogicException instead of Error when trying to generate logout-… (addiks)
+ * bug #47857 [HttpKernel] Fix empty request stack when terminating with exception (krzyc)
+ * bug #47878 [HttpKernel] Remove EOL when using error_log() in HttpKernel Logger (cyve)
+ * bug #47883 [Console] Fix error output on windows cli (Maximilian.Beckers)
+ * bug #47884 [Cache] Reserve numeric keys when doing memory leak prevention (simoheinonen)
+ * bug #47822 [Mailer] fix: use message object from event (rogamoore)
+ * bug #47858 [DoctrineBridge] Implement `EventManager::getAllListeners()` (derrabus)
+
* 4.4.47 (2022-10-12)
* bug #47621 [Serializer] Allow getting discriminated type by class name (TamasSzigeti)
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index baf049c540d1d..72ef68321528f 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -47,9 +47,9 @@ The Symfony Connect username in parenthesis allows to get more information
- Jean-François Simon (jfsimon)
- Benjamin Eberlei (beberlei)
- Igor Wiedler
+ - HypeMC (hypemc)
- Valentin Udaltsov (vudaltsov)
- Vasilij Duško (staff)
- - HypeMC (hypemc)
- Matthias Pigulla (mpdude)
- Laurent VOULLEMIER (lvo)
- Antoine Makdessi (amakdessi)
@@ -64,6 +64,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Alexander Schranz (alexander-schranz)
- ornicar
- Dany Maillard (maidmaid)
+ - Mathieu Santostefano (welcomattic)
- Eriksen Costa
- Diego Saint Esteben (dosten)
- stealth35 (stealth35)
@@ -72,7 +73,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Francis Besset (francisbesset)
- Alexandre Daubois (alexandre-daubois)
- Vasilij Dusko | CREATION
- - Mathieu Santostefano (welcomattic)
- Bulat Shakirzyanov (avalanche123)
- Iltar van der Berg
- Miha Vrhovnik (mvrhov)
@@ -112,17 +112,17 @@ The Symfony Connect username in parenthesis allows to get more information
- Przemysław Bogusz (przemyslaw-bogusz)
- Henrik Westphal (snc)
- Dariusz Górecki (canni)
+ - Mathieu Lechat (mat_the_cat)
- Maxime Helias (maxhelias)
- Ener-Getick
- Ruud Kamphuis (ruudk)
- - Mathieu Lechat (mat_the_cat)
+ - Antoine Lamirault
- Sebastiaan Stok (sstok)
- Jérôme Vasseur (jvasseur)
- Ion Bazan (ionbazan)
- Lee McDermott
- Brandon Turner
- Luis Cordova (cordoval)
- - Antoine Lamirault
- Daniel Holmes (dholmes)
- Toni Uebernickel (havvg)
- Bart van den Burg (burgov)
@@ -177,12 +177,13 @@ The Symfony Connect username in parenthesis allows to get more information
- HeahDude
- Richard van Laak (rvanlaak)
- Paráda József (paradajozsef)
+ - Christopher Hertel (chertel)
- Alessandro Lai (jean85)
- Alexander Schwenn (xelaris)
- Fabien Pennequin (fabienpennequin)
- Gordon Franke (gimler)
- François-Xavier de Guillebon (de-gui_f)
- - Christopher Hertel (chertel)
+ - Andreas Schempp (aschempp)
- Gabriel Caruso
- Anthony GRASSIOT (antograssiot)
- Jan Rosier (rosier)
@@ -196,7 +197,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Tigran Azatyan (tigranazatyan)
- Eric GELOEN (gelo)
- Matthieu Napoli (mnapoli)
- - Andreas Schempp (aschempp)
- Tomáš Votruba (tomas_votruba)
- Joshua Thijssen
- Stefano Sala (stefano.sala)
@@ -223,16 +223,17 @@ The Symfony Connect username in parenthesis allows to get more information
- Daniel Gomes (danielcsgomes)
- Michael Käfer (michael_kaefer)
- Hidenori Goto (hidenorigoto)
+ - Dāvis Zālītis (k0d3r1s)
- Albert Casademont (acasademont)
- Arnaud Kleinpeter (nanocom)
- Guilherme Blanco (guilhermeblanco)
- Chi-teck
- Michael Voříšek
+ - Farhad Safarov (safarov)
- SpacePossum
- Pablo Godel (pgodel)
- Romaric Drigon (romaricdrigon)
- Andréia Bohner (andreia)
- - Dāvis Zālītis (k0d3r1s)
- Jannik Zschiesche
- Rafael Dohms (rdohms)
- George Mponos (gmponos)
@@ -243,7 +244,6 @@ The Symfony Connect username in parenthesis allows to get more information
- David Prévot
- Vincent Touzet (vincenttouzet)
- Fabien Bourigault (fbourigault)
- - Farhad Safarov (safarov)
- Jérémy Derussé
- Nicolas Philippe (nikophil)
- Hubert Lenoir (hubert_lenoir)
@@ -262,6 +262,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Andre Rømcke (andrerom)
- Dmitrii Poddubnyi (karser)
- soyuka
+ - Sergey (upyx)
- Rouven Weßling (realityking)
- BoShurik
- Zmey
@@ -287,13 +288,13 @@ The Symfony Connect username in parenthesis allows to get more information
- Artur Kotyrba
- Tyson Andre
- Thomas Landauer (thomas-landauer)
+ - Phil Taylor (prazgod)
- GDIBass
- Samuel NELA (snela)
- dFayet
- Karoly Gossler (connorhu)
- Vincent AUBERT (vincent)
- Sebastien Morel (plopix)
- - Sergey (upyx)
- Yoann RENARD (yrenard)
- Thomas Lallement (raziel057)
- Timothée Barray (tyx)
@@ -334,6 +335,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Islam Israfilov (islam93)
- Oleg Andreyev (oleg.andreyev)
- Daniel Gorgan
+ - Sébastien Alfaiate (seb33300)
- Hendrik Luup (hluup)
- Martin Herndl (herndlm)
- Ruben Gonzalez (rubenrua)
@@ -361,7 +363,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Philipp Wahala (hifi)
- Nikolay Labinskiy (e-moe)
- Martin Schuhfuß (usefulthink)
- - Phil Taylor (prazgod)
- apetitpa
- Vladyslav Loboda
- Pierre Minnieur (pminnieur)
@@ -399,7 +400,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Tristan Darricau (tristandsensio)
- Fabien S (bafs)
- Victor Bocharsky (bocharsky_bw)
- - Sébastien Alfaiate (seb33300)
- Jan Sorgalla (jsor)
- henrikbjorn
- Alex Bowers
@@ -409,6 +409,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Craig Duncan (duncan3dc)
- Mantis Development
- Pablo Lozano (arkadis)
+ - Romain Monteil (ker0x)
- quentin neyrat (qneyrat)
- Antonio Jose Cerezo (ajcerezo)
- Marcin Szepczynski (czepol)
@@ -496,7 +497,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Thomas Schulz (king2500)
- Benjamin Morel
- Bernd Stellwag
- - Romain Monteil (ker0x)
- Frank de Jonge
- Chris Tanaskoski
- julien57
@@ -531,6 +531,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Giso Stallenberg (gisostallenberg)
- Blanchon Vincent (blanchonvincent)
- William Arslett (warslett)
+ - Jérémy REYNAUD (babeuloula)
- Christian Schmidt
- Gonzalo Vilaseca (gonzalovilaseca)
- Vadim Borodavko (javer)
@@ -721,7 +722,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Guillaume Verstraete
- vladimir.panivko
- Jason Tan (jt2k)
- - Jérémy REYNAUD (babeuloula)
- Costin Bereveanu (schniper)
- kick-the-bucket
- Marek Kalnik (marekkalnik)
@@ -834,12 +834,15 @@ The Symfony Connect username in parenthesis allows to get more information
- Daniel González (daniel.gonzalez)
- Renan (renanbr)
- Webnet team (webnet)
+ - Tobias Bönner
- Berny Cantos (xphere81)
- Mátyás Somfai (smatyas)
- Jan Schumann
+ - Matheo Daninos (mathdns)
- Niklas Fiekas
- Mark Challoner (markchalloner)
- Markus Bachmann (baachi)
+ - Philippe SEGATORI (tigitz)
- Roger Guasch (rogerguasch)
- Luis Tacón (lutacon)
- Alex Hofbauer (alexhofbauer)
@@ -933,11 +936,13 @@ The Symfony Connect username in parenthesis allows to get more information
- Vicent Soria Durá (vicentgodella)
- Michael Moravec
- Anthony Ferrara
+ - Glodzienski
- Christian Gripp (core23)
- Marcel Hernandez
- Ioan Negulescu
- Jakub Škvára (jskvara)
- Andrew Udvare (audvare)
+ - Volodymyr Panivko
- alexpods
- Dennis Langen (nijusan)
- Adam Szaraniec
@@ -1051,7 +1056,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Grégoire Hébert (gregoirehebert)
- alcaeus
- Fred Cox
- - Matheo Daninos (mathdns)
- Iliya Miroslavov Iliev (i.miroslavov)
- Safonov Nikita (ns3777k)
- Simon DELICATA
@@ -1081,7 +1085,6 @@ The Symfony Connect username in parenthesis allows to get more information
- pizzaminded
- Matthieu Calie (matth--)
- Stéphane Escandell (sescandell)
- - Philippe SEGATORI (tigitz)
- ivan
- linh
- Oleg Krasavin (okwinza)
@@ -1353,7 +1356,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Grinbergs Reinis (shima5)
- Ruud Arentsen
- Harald Tollefsen
- - Tobias Bönner
- Arend-Jan Tetteroo
- Mbechezi Nawo
- Andre Eckardt (korve)
@@ -1433,6 +1435,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Gladhon
- Kai
- Bartłomiej Zając
+ - Maximilian.Beckers
- Grégoire Penverne (gpenverne)
- Venu
- Jonatan Männchen
@@ -1545,7 +1548,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Vitali Tsyrkin
- Juga Paazmaya
- afaricamp
- - Glodzienski
- riadh26
- Konstantinos Alexiou
- Dilek Erkut
@@ -1737,7 +1739,6 @@ The Symfony Connect username in parenthesis allows to get more information
- Antoine M
- Frank Jogeleit
- Ondřej Frei
- - Volodymyr Panivko
- Jenne van der Meer
- Storkeus
- Anton Zagorskii
@@ -1793,6 +1794,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Morgan Auchede
- Christian Morgan
- Alexander Miehe
+ - Simon (kosssi)
- Sascha Dens (saschadens)
- Maxime Aknin (3m1x4m)
- Geordie
@@ -1976,6 +1978,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Anton Dyshkant
- Kirill Nesmeyanov (serafim)
- Reece Fowell (reecefowell)
+ - Muhammad Aakash
- Guillaume Gammelin
- Valérian Galliat
- d-ph
@@ -2064,6 +2067,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Ariel J. Birnbaum
- Danijel Obradović
- Pablo Borowicz
+ - Ondřej Frei
- Máximo Cuadros (mcuadros)
- Lukas Mencl
- EXT - THERAGE Kevin
@@ -2207,6 +2211,7 @@ The Symfony Connect username in parenthesis allows to get more information
- David de Boer (ddeboer)
- Eno Mullaraj (emullaraj)
- Stephan Vock (glaubinix)
+ - Guillem Fondin (guillemfondin)
- Ryan Rogers
- Arnaud
- Klaus Purer
@@ -2258,6 +2263,7 @@ The Symfony Connect username in parenthesis allows to get more information
- gndk
- Alberto Aldegheri
- Dalibor Karlović
+ - Cyril Vermandé (cyve)
- Dmitri Petmanson
- heccjj
- Alexandre Melard
@@ -2331,6 +2337,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Clément LEFEBVRE (nemoneph)
- Walter Dal Mut (wdalmut)
- abluchet
+ - PabloKowalczyk
- Matthieu
- Albin Kerouaton
- Sébastien HOUZÉ
@@ -2372,6 +2379,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Sandro Hopf (senaria)
- ChrisC
- jack.shpartko
+ - Willem Verspyck
- Kim Laï Trinh
- Jason Desrosiers
- m.chwedziak
@@ -2386,6 +2394,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Ilya Biryukov (ibiryukov)
- Roma (memphys)
- Giorgio Premi
+ - Krzysztof Pyrkosz
- ncou
- Ian Carroll
- caponica
@@ -2418,6 +2427,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Emmanuel Vella (emmanuel.vella)
- Guillaume BRETOU (guiguiboy)
- Ibon Conesa (ibonkonesa)
+ - Yoann Chocteau (kezaweb)
- nuryagdy mustapayev (nueron)
- Carsten Nielsen (phreaknerd)
- Jay Severson
@@ -2443,6 +2453,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Pieter Jordaan
- Tournoud (damientournoud)
- Michael Dowling (mtdowling)
+ - Arnaud POINTET (oipnet)
- Karlos Presumido (oneko)
- Tony Vermeiren (tony)
- Thomas Counsell
@@ -2490,6 +2501,7 @@ The Symfony Connect username in parenthesis allows to get more information
- James Cowgill
- sensio
- Julien Menth (cfjulien)
+ - Lyubomir Grozdanov (lubo13)
- Nicolas Schwartz (nicoschwartz)
- Tim Jabs (rubinum)
- Stéphane Seng (stephaneseng)
@@ -2541,6 +2553,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Alex Teterin (errogaht)
- Gunnar Lium (gunnarlium)
- Malte Wunsch (maltewunsch)
+ - Simo Heinonen (simoheinonen)
- Tiago Garcia (tiagojsag)
- Artiom
- Jakub Simon
@@ -2571,6 +2584,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Boris Betzholz
- Eric Caron
- Arnau González
+ - GurvanVgx
- 2manypeople
- Wing
- Thomas Bibb
@@ -2713,6 +2727,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Milos Colakovic (project2481)
- Rénald Casagraude (rcasagraude)
- Robin Duval (robin-duval)
+ - Mohammad Ali Sarbanha (sarbanha)
- Artem Lopata (bumz)
- alex
- Roman Orlov
@@ -2849,6 +2864,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Jelle Kapitein
- Jochen Mandl
- Marin Nicolae
+ - Gerrit Addiks
- Albert Prat
- Alessandro Loffredo
- Ian Phillips
@@ -2910,6 +2926,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Tomáš Polívka (draczris)
- Dennis Smink (dsmink)
- Franz Liedke (franzliedke)
+ - Alex (garrett)
- Gaylord Poillon (gaylord_p)
- gondo (gondo)
- Joris Garonian (grifx)
@@ -2955,6 +2972,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Francois Martin
- Saem Ghani
- Stefan Oderbolz
+ - Tamás Szigeti
- Gabriel Moreira
- Alexey Popkov
- ChS
@@ -2975,7 +2993,6 @@ The Symfony Connect username in parenthesis allows to get more information
- HADJEDJ Vincent (hadjedjvincent)
- Daniele Cesarini (ijanki)
- Ismail Asci (ismailasci)
- - Simon (kosssi)
- Ondřej Mirtes (mirtes)
- Paulius Jarmalavičius (pjarmalavicius)
- Ramon Ornelas (ramonornela)
@@ -3020,6 +3037,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Vyacheslav Slinko
- Benjamin Laugueux
- Jakub Chábek
+ - William Pinaud (DocFX)
- Johannes
- Jörg Rühl
- wesleyh
@@ -3067,6 +3085,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Skorney
- Lucas Matte
- fmarchalemisys
+ - MGatner
- mieszko4
- Steve Preston
- ibasaw
@@ -3265,6 +3284,7 @@ The Symfony Connect username in parenthesis allows to get more information
- Konstantin Scheumann
- Michael
- fh-github@fholzhauer.de
+ - rogamoore
- AbdElKader Bouadjadja
- DSeemiller
- Jan Emrich
diff --git a/UPGRADE-5.0.md b/UPGRADE-5.0.md
index 67b5ef02c3787..17dbdc4759b88 100644
--- a/UPGRADE-5.0.md
+++ b/UPGRADE-5.0.md
@@ -525,10 +525,6 @@ Serializer
were removed, use the default context instead.
* The `AbstractNormalizer::handleCircularReference()` method has two new `$format` and `$context` arguments.
* Removed support for instantiating a `DataUriNormalizer` with a default MIME type guesser when the `symfony/mime` component isn't installed.
-
-Serializer
-----------
-
* Removed the `XmlEncoder::TYPE_CASE_ATTRIBUTES` constant. Use `XmlEncoder::TYPE_CAST_ATTRIBUTES` instead.
Stopwatch
diff --git a/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php b/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php
index 48385c93ac19e..bb0f62a95c76f 100644
--- a/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php
+++ b/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php
@@ -72,15 +72,23 @@ public function dispatchEvent($eventName, EventArgs $eventArgs = null)
*/
public function getListeners($event = null)
{
+ if (null === $event) {
+ return $this->getAllListeners();
+ }
if (!$this->initializedSubscribers) {
$this->initializeSubscribers();
}
- if (null !== $event) {
- if (!isset($this->initialized[$event])) {
- $this->initializeListeners($event);
- }
+ if (!isset($this->initialized[$event])) {
+ $this->initializeListeners($event);
+ }
- return $this->listeners[$event];
+ return $this->listeners[$event];
+ }
+
+ public function getAllListeners(): array
+ {
+ if (!$this->initializedSubscribers) {
+ $this->initializeSubscribers();
}
foreach ($this->listeners as $event => $listeners) {
diff --git a/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php b/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php
index e9d260ec26608..868fc25cf6151 100644
--- a/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php
+++ b/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php
@@ -165,6 +165,15 @@ public function testGetListeners()
$this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners()['foo']));
}
+ public function testGetAllListeners()
+ {
+ $this->container->set('lazy', $listener1 = new MyListener());
+ $this->evm->addEventListener('foo', 'lazy');
+ $this->evm->addEventListener('foo', $listener2 = new MyListener());
+
+ $this->assertSame([$listener1, $listener2], array_values($this->evm->getAllListeners()['foo']));
+ }
+
public function testRemoveEventListener()
{
$this->container->set('lazy', $listener1 = new MyListener());
diff --git a/src/Symfony/Component/Cache/Adapter/RedisTagAwareAdapter.php b/src/Symfony/Component/Cache/Adapter/RedisTagAwareAdapter.php
index 3d950f9352756..fd263da3cd58f 100644
--- a/src/Symfony/Component/Cache/Adapter/RedisTagAwareAdapter.php
+++ b/src/Symfony/Component/Cache/Adapter/RedisTagAwareAdapter.php
@@ -204,7 +204,7 @@ protected function doInvalidate(array $tagIds): bool
// and removes the linked items. When the set is still not empty after
// the scan, it means we're in cluster mode and that the linked items
// are on other nodes: we move the links to a temporary set and we
- // gargage collect that set from the client side.
+ // garbage collect that set from the client side.
$lua = <<<'EOLUA'
redis.replicate_commands()
diff --git a/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php b/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php
index 01f17fdb8a729..60449e1d24bcc 100644
--- a/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php
+++ b/src/Symfony/Component/Cache/Tests/Adapter/AdapterTestCase.php
@@ -331,6 +331,19 @@ public function testNullByteInKey()
$this->assertSame(123, $cache->getItem("a\0b")->get());
}
+
+ public function testNumericKeysWorkAfterMemoryLeakPrevention()
+ {
+ $cache = $this->createCachePool(0, __FUNCTION__);
+
+ for ($i = 0; $i < 1001; ++$i) {
+ $cacheItem = $cache->getItem((string) $i);
+ $cacheItem->set('value-'.$i);
+ $cache->save($cacheItem);
+ }
+
+ $this->assertEquals('value-50', $cache->getItem((string) 50)->get());
+ }
}
class NotUnserializable
diff --git a/src/Symfony/Component/Cache/Traits/AbstractTrait.php b/src/Symfony/Component/Cache/Traits/AbstractTrait.php
index f4902917d38b0..b047880661ff9 100644
--- a/src/Symfony/Component/Cache/Traits/AbstractTrait.php
+++ b/src/Symfony/Component/Cache/Traits/AbstractTrait.php
@@ -290,7 +290,7 @@ private function getId($key): string
$this->ids[$key] = $key;
if (\count($this->ids) > 1000) {
- array_splice($this->ids, 0, 500); // stop memory leak if there are many keys
+ $this->ids = \array_slice($this->ids, 500, null, true); // stop memory leak if there are many keys
}
if (null === $this->maxIdLength) {
diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php
index 1021a900f0972..42c4911a0f888 100644
--- a/src/Symfony/Component/Console/Application.php
+++ b/src/Symfony/Component/Console/Application.php
@@ -254,7 +254,9 @@ public function doRun(InputInterface $input, OutputInterface $output)
$alternative = $alternatives[0];
$style = new SymfonyStyle($input, $output);
- $style->block(sprintf("\nCommand \"%s\" is not defined.\n", $name), null, 'error');
+ $output->writeln('');
+ $formattedBlock = (new FormatterHelper())->formatBlock(sprintf('Command "%s" is not defined.', $name), 'error', true);
+ $output->writeln($formattedBlock);
if (!$style->confirm(sprintf('Do you want to run "%s" instead? ', $alternative), false)) {
if (null !== $this->dispatcher) {
$event = new ConsoleErrorEvent($input, $output, $e);
@@ -955,11 +957,21 @@ protected function configureIO(InputInterface $input, OutputInterface $output)
}
switch ($shellVerbosity = (int) getenv('SHELL_VERBOSITY')) {
- case -1: $output->setVerbosity(OutputInterface::VERBOSITY_QUIET); break;
- case 1: $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE); break;
- case 2: $output->setVerbosity(OutputInterface::VERBOSITY_VERY_VERBOSE); break;
- case 3: $output->setVerbosity(OutputInterface::VERBOSITY_DEBUG); break;
- default: $shellVerbosity = 0; break;
+ case -1:
+ $output->setVerbosity(OutputInterface::VERBOSITY_QUIET);
+ break;
+ case 1:
+ $output->setVerbosity(OutputInterface::VERBOSITY_VERBOSE);
+ break;
+ case 2:
+ $output->setVerbosity(OutputInterface::VERBOSITY_VERY_VERBOSE);
+ break;
+ case 3:
+ $output->setVerbosity(OutputInterface::VERBOSITY_DEBUG);
+ break;
+ default:
+ $shellVerbosity = 0;
+ break;
}
if (true === $input->hasParameterOption(['--quiet', '-q'], true)) {
diff --git a/src/Symfony/Component/Form/ChoiceList/ArrayChoiceList.php b/src/Symfony/Component/Form/ChoiceList/ArrayChoiceList.php
index 7917f4a543da9..e5056d897fc9d 100644
--- a/src/Symfony/Component/Form/ChoiceList/ArrayChoiceList.php
+++ b/src/Symfony/Component/Form/ChoiceList/ArrayChoiceList.php
@@ -15,7 +15,7 @@
* A list of choices with arbitrary data types.
*
* The user of this class is responsible for assigning string values to the
- * choices annd for their uniqueness.
+ * choices and for their uniqueness.
* Both the choices and their values are passed to the constructor.
* Each choice must have a corresponding value (with the same key) in
* the values array.
diff --git a/src/Symfony/Component/Form/Resources/translations/validators.lv.xlf b/src/Symfony/Component/Form/Resources/translations/validators.lv.xlf
index e7c90c793ede1..54711cb5f88b0 100644
--- a/src/Symfony/Component/Form/Resources/translations/validators.lv.xlf
+++ b/src/Symfony/Component/Form/Resources/translations/validators.lv.xlf
@@ -132,7 +132,7 @@
Please enter a valid week.
- Lūdzu, ievadiet derīgu nedeļu.
+ Lūdzu, ievadiet derīgu nedēļu.
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
+
+ This form should not contain extra fields.
+ اس فارم میں اضافی فیلڈز نہیں ہونی چاہئیں
+
+
+ The uploaded file was too large. Please try to upload a smaller file.
+ اپ لوڈ کردھ فائل بہت بڑی تھی۔ براہ کرم ایک چھوٹی فائل اپ لوڈ کرنے کی کوشش کریں
+
+
+ The CSRF token is invalid. Please try to resubmit the form.
+ ٹوکن غلط ہے۔ براۓ کرم فارم کو دوبارہ جمع کرانے کی کوشش کریں CSRF
+
+
+ This value is not a valid HTML5 color.
+ ر نگ نھیں ھےHTML یھ ولیو در ست
+
+
+ Please enter a valid birthdate.
+ براۓ کرم درست تاریخ پیدائش درج کریں
+
+
+ The selected choice is invalid.
+ منتخب کردہ انتخاب غلط ہے
+
+
+ The collection is invalid.
+ یھ مجموعہ غلط ہے
+
+
+ Please select a valid color.
+ براۓ کرم ایک درست رنگ منتخب کریں
+
+
+ Please select a valid country.
+ براۓ کرم ایک درست ملک منتخب کریں
+
+
+ Please select a valid currency.
+ براۓ کرم ایک درست کرنسی منتخب کریں
+
+
+ Please choose a valid date interval.
+ براۓ کرم ایک درست تاریخی وقفھہ منتخب کریں
+
+
+ Please enter a valid date and time.
+ براۓ کرم ایک درست تاریخ اور وقت درج کریں
+
+
+ Please enter a valid date.
+ براۓ کرم ایک درست تاریخ درج کریں
+
+
+ Please select a valid file.
+ براۓ کرم ایک درست فائل منتخب کریں
+
+
+ The hidden field is invalid.
+ پوشیدھہ فیلڈ غلط ہے
+
+
+ Please enter an integer.
+ براۓ کرم ایک عدد درج کریں
+
+
+ Please select a valid language.
+ براۓ کرم ایک درست زبان منتخب کریں
+
+
+ Please select a valid locale.
+ براۓ کرم ایک درست مقام منتخب کریں
+
+
+ Please enter a valid money amount.
+ براۓ کرم ایک درست رقم درج کریں
+
+
+ Please enter a number.
+ براۓ کرم ایک نمبر درج کریں
+
+
+ The password is invalid.
+ پاس ورڈ غلط ہے
+
+
+ Please enter a percentage value.
+ براہ کرم فیصد کی ويلو درج کریں
+
+
+ The values do not match.
+ ويليوذ ٹھيک نہیں ہیں
+
+
+ Please enter a valid time.
+ براۓ کرم ایک درست وقت درج کریں
+
+
+ Please select a valid timezone.
+ براۓ کرم ایک درست ٹائم زون منتخب کریں
+
+
+ Please enter a valid URL.
+ براۓ کرم ایک درست ادريس درج کریں
+
+
+ Please enter a valid search term.
+ براۓ کرم ایک درست ويلو تلاش کيلۓ درج کریں
+
+
+ Please provide a valid phone number.
+ براۓ کرم ایک درست فون نمبر فراہم کریں
+
+
+ The checkbox has an invalid value.
+ چیک باکس میں ایک غلط ويلو ہے
+
+
+ Please enter a valid email address.
+ براۓ مہربانی قابل قبول ای میل ایڈریس لکھیں
+
+
+ Please select a valid option.
+ براۓ کرم ایک درست آپشن منتخب کریں
+
+
+ Please select a valid range.
+ براۓ کرم ایک درست رینج منتخب کریں
+
+
+ Please enter a valid week.
+ براۓ کرم ایک درست ہفتہ درج کریں
+
+
+
+
diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/common.inc b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/common.inc
index fd662e3a16236..ef87754235891 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/common.inc
+++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/common.inc
@@ -54,10 +54,12 @@ ob_start();
class TestSessionHandler extends AbstractSessionHandler
{
private $data;
+ private $sessionId;
- public function __construct($data = '')
+ public function __construct($data = '', $sessionId = null)
{
$this->data = $data;
+ $this->sessionId = $sessionId;
}
public function open($path, $name): bool
@@ -131,7 +133,13 @@ class TestSessionHandler extends AbstractSessionHandler
protected function doRead($sessionId): string
{
- echo __FUNCTION__.': ', $this->data, "\n";
+ if (isset($this->sessionId) && $sessionId !== $this->sessionId) {
+ echo __FUNCTION__ . ": invalid sessionId\n";
+
+ return '';
+ }
+ echo __FUNCTION__ . ': ', $this->data, "\n";
+ $this->sessionId = $sessionId;
return $this->data;
}
@@ -139,6 +147,7 @@ class TestSessionHandler extends AbstractSessionHandler
protected function doWrite($sessionId, $data): bool
{
echo __FUNCTION__.': ', $data, "\n";
+ $this->sessionId = $sessionId;
return true;
}
@@ -146,6 +155,7 @@ class TestSessionHandler extends AbstractSessionHandler
protected function doDestroy($sessionId): bool
{
echo __FUNCTION__, "\n";
+ $this->sessionId = '';
return true;
}
diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/regenerate.expected b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/regenerate.expected
index d825f44f7cb86..95c96f0cccdf7 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/regenerate.expected
+++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/regenerate.expected
@@ -9,9 +9,8 @@ close
open
validateId
read
-doRead: abc|i:123;
+doRead: invalid sessionId
read
-doRead: abc|i:123;
write
doWrite: abc|i:123;
diff --git a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/with_samesite_and_migration.expected b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/with_samesite_and_migration.expected
index 8b5fc08bd375b..b7cae201ccb76 100644
--- a/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/with_samesite_and_migration.expected
+++ b/src/Symfony/Component/HttpFoundation/Tests/Session/Storage/Handler/Fixtures/with_samesite_and_migration.expected
@@ -8,7 +8,7 @@ close
open
validateId
read
-doRead:
+doRead: invalid sessionId
read
write
diff --git a/src/Symfony/Component/HttpKernel/HttpKernel.php b/src/Symfony/Component/HttpKernel/HttpKernel.php
index d53b80665b467..e23023d3c40ff 100644
--- a/src/Symfony/Component/HttpKernel/HttpKernel.php
+++ b/src/Symfony/Component/HttpKernel/HttpKernel.php
@@ -112,7 +112,17 @@ public function terminateWithException(\Throwable $exception, Request $request =
throw $exception;
}
- $response = $this->handleThrowable($exception, $request, self::MASTER_REQUEST);
+ if ($pop = $request !== $this->requestStack->getMasterRequest()) {
+ $this->requestStack->push($request);
+ }
+
+ try {
+ $response = $this->handleThrowable($exception, $request, self::MASTER_REQUEST);
+ } finally {
+ if ($pop) {
+ $this->requestStack->pop();
+ }
+ }
$response->sendHeaders();
$response->sendContent();
diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php
index f944b3d9e6ac6..54ea465379ba1 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 $freshCache = [];
- public const VERSION = '4.4.47';
- public const VERSION_ID = 40447;
+ public const VERSION = '4.4.48';
+ public const VERSION_ID = 40448;
public const MAJOR_VERSION = 4;
public const MINOR_VERSION = 4;
- public const RELEASE_VERSION = 47;
+ public const RELEASE_VERSION = 48;
public const EXTRA_VERSION = '';
public const END_OF_MAINTENANCE = '11/2022';
diff --git a/src/Symfony/Component/HttpKernel/Log/Logger.php b/src/Symfony/Component/HttpKernel/Log/Logger.php
index d7f297f5864cd..1238517f64e5d 100644
--- a/src/Symfony/Component/HttpKernel/Log/Logger.php
+++ b/src/Symfony/Component/HttpKernel/Log/Logger.php
@@ -44,10 +44,14 @@ public function __construct(string $minLevel = null, $output = null, callable $f
if (isset($_ENV['SHELL_VERBOSITY']) || isset($_SERVER['SHELL_VERBOSITY'])) {
switch ((int) ($_ENV['SHELL_VERBOSITY'] ?? $_SERVER['SHELL_VERBOSITY'])) {
- case -1: $minLevel = LogLevel::ERROR; break;
- case 1: $minLevel = LogLevel::NOTICE; break;
- case 2: $minLevel = LogLevel::INFO; break;
- case 3: $minLevel = LogLevel::DEBUG; break;
+ case -1: $minLevel = LogLevel::ERROR;
+ break;
+ case 1: $minLevel = LogLevel::NOTICE;
+ break;
+ case 2: $minLevel = LogLevel::INFO;
+ break;
+ case 3: $minLevel = LogLevel::DEBUG;
+ break;
}
}
}
@@ -80,7 +84,7 @@ public function log($level, $message, array $context = [])
$formatter = $this->formatter;
if ($this->handle) {
- @fwrite($this->handle, $formatter($level, $message, $context));
+ @fwrite($this->handle, $formatter($level, $message, $context).\PHP_EOL);
} else {
error_log($formatter($level, $message, $context, false));
}
@@ -105,7 +109,7 @@ private function format(string $level, string $message, array $context, bool $pr
$message = strtr($message, $replacements);
}
- $log = sprintf('[%s] %s', $level, $message).\PHP_EOL;
+ $log = sprintf('[%s] %s', $level, $message);
if ($prefixDate) {
$log = date(\DateTime::RFC3339).' '.$log;
}
diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php
index 53e5f547d249f..a163715f81b22 100644
--- a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php
@@ -20,6 +20,7 @@
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface;
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
+use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
use Symfony\Component\HttpKernel\Exception\ControllerDoesNotReturnResponseException;
@@ -340,6 +341,22 @@ public function testTerminate()
$this->assertEquals($response, $capturedResponse);
}
+ public function testTerminateWithException()
+ {
+ $dispatcher = new EventDispatcher();
+ $requestStack = new RequestStack();
+ $kernel = $this->getHttpKernel($dispatcher, null, $requestStack);
+
+ $dispatcher->addListener(KernelEvents::EXCEPTION, function (ExceptionEvent $event) use (&$capturedRequest, $requestStack) {
+ $capturedRequest = $requestStack->getCurrentRequest();
+ $event->setResponse(new Response());
+ });
+
+ $kernel->terminateWithException(new \Exception('boo'), $request = Request::create('/'));
+ $this->assertSame($request, $capturedRequest);
+ $this->assertNull($requestStack->getCurrentRequest());
+ }
+
public function testVerifyRequestStackPushPopDuringHandle()
{
$request = new Request();
diff --git a/src/Symfony/Component/HttpKernel/Tests/Log/LoggerTest.php b/src/Symfony/Component/HttpKernel/Tests/Log/LoggerTest.php
index fb2b43cc82aed..5996e6e72ad35 100644
--- a/src/Symfony/Component/HttpKernel/Tests/Log/LoggerTest.php
+++ b/src/Symfony/Component/HttpKernel/Tests/Log/LoggerTest.php
@@ -48,7 +48,7 @@ protected function tearDown(): void
public static function assertLogsMatch(array $expected, array $given)
{
foreach ($given as $k => $line) {
- self::assertThat(1 === preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[\+-][0-9]{2}:[0-9]{2} '.preg_quote($expected[$k]).'/', $line), self::isTrue(), "\"$line\" do not match expected pattern \"$expected[$k]\"");
+ self::assertSame(1, preg_match('/[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[\+-][0-9]{2}:[0-9]{2} '.preg_quote($expected[$k]).'/', $line), "\"$line\" do not match expected pattern \"$expected[$k]\"");
}
}
@@ -186,7 +186,7 @@ public function testContextExceptionKeyCanBeExceptionOrOtherValues()
public function testFormatter()
{
$this->logger = new Logger(LogLevel::DEBUG, $this->tmpFile, function ($level, $message, $context) {
- return json_encode(['level' => $level, 'message' => $message, 'context' => $context]).\PHP_EOL;
+ return json_encode(['level' => $level, 'message' => $message, 'context' => $context]);
});
$this->logger->error('An error', ['foo' => 'bar']);
@@ -196,6 +196,26 @@ public function testFormatter()
'{"level":"warning","message":"A warning","context":{"baz":"bar"}}',
], $this->getLogs());
}
+
+ public function testLogsWithoutOutput()
+ {
+ $oldErrorLog = ini_set('error_log', $this->tmpFile);
+
+ $logger = new Logger();
+ $logger->error('test');
+ $logger->critical('test');
+
+ $expected = [
+ '[error] test',
+ '[critical] test',
+ ];
+
+ foreach ($this->getLogs() as $k => $line) {
+ $this->assertSame(1, preg_match('/\[[\w\/\-: ]+\] '.preg_quote($expected[$k]).'/', $line), "\"$line\" do not match expected pattern \"$expected[$k]\"");
+ }
+
+ ini_set('error_log', $oldErrorLog);
+ }
}
class DummyTest
diff --git a/src/Symfony/Component/Mailer/Transport/AbstractTransport.php b/src/Symfony/Component/Mailer/Transport/AbstractTransport.php
index 7ee4513190b33..31dddaa63ace3 100644
--- a/src/Symfony/Component/Mailer/Transport/AbstractTransport.php
+++ b/src/Symfony/Component/Mailer/Transport/AbstractTransport.php
@@ -61,6 +61,7 @@ public function send(RawMessage $message, Envelope $envelope = null): ?SentMessa
$event = new MessageEvent($message, $envelope, (string) $this);
$this->dispatcher->dispatch($event);
$envelope = $event->getEnvelope();
+ $message = $event->getMessage();
}
$message = new SentMessage($message, $envelope);
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf
index 735de0786567c..ca4401adad3e5 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.az.xlf
@@ -70,6 +70,14 @@
Invalid or expired login link.Yanlış və ya müddəti keçmiş giriş keçidi.
+
+ Too many failed login attempts, please try again in %minutes% minute.
+ Həddindən artıq uğursuz giriş cəhdi, lütfən %minutes% dəqiqə ərzində yenidən yoxlayın.
+
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ Həddindən artıq uğursuz giriş cəhdi, lütfən %minutes% dəqiqə ərzində yenidən yoxlayın.
+
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf
index bdb4a22357f4b..0833b026f3961 100644
--- a/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.lv.xlf
@@ -24,7 +24,7 @@
Not privileged to request the resource.
- Nav tiesību ši resursa izsaukšanai.
+ Nav tiesību šī resursa izsaukšanai.Invalid CSRF token.
@@ -64,11 +64,11 @@
Too many failed login attempts, please try again later.
- Pārāk daudz atteiktu ieejas mēģinājumu, lūdzu, mēģiniet vēlreiz vēlāk.
+ Pārāk daudz atteiktu autentifikācijas mēģinājumu, lūdzu, mēģiniet vēlreiz vēlāk.Invalid or expired login link.
- Ieejas saite ir nederīga vai arī tai ir beidzies derīguma termiņš.
+ Autentifikācijas saite ir nederīga vai arī tai ir beidzies derīguma termiņš.Too many failed login attempts, please try again in %minutes% minute.
diff --git a/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf
new file mode 100644
index 0000000000000..8fd59b691b8ee
--- /dev/null
+++ b/src/Symfony/Component/Security/Core/Resources/translations/security.ur.xlf
@@ -0,0 +1,83 @@
+
+
+
+
+
+ An authentication exception occurred.
+ ایک تصدیقي خرابی پیش آگئی ۓ
+
+
+ Authentication credentials could not be found.
+ درج کردھ ریکارڈ نہیں مل سکا
+
+
+ Authentication request could not be processed due to a system problem.
+ سسٹم کی خرابی کی وجہ سے تصدیق کی درخواست پر کارروائی نہیں ہو سکی
+
+
+ Invalid credentials.
+ غلط ڈیٹا
+
+
+ Cookie has already been used by someone else.
+ کوکی پہلے ہی کسی اور کے ذریعہ استعمال ہو چکی ہے
+
+
+ Not privileged to request the resource.
+ وسائل کی درخواست کرنے کا اختیار نہیں ہے
+
+
+ Invalid CSRF token.
+ ٹوکن غلط ہے CSRF
+
+
+ No authentication provider found to support the authentication token.
+ تصدیقی ٹوکن کو سپورٹ کرنے کے لیے کوئی تصدیقی کنندہ نہیں ملا
+
+
+ No session available, it either timed out or cookies are not enabled.
+ کوئی سیشن دستیاب نہیں ہے، یا تو اس کا وقت ختم ہو گیا ہے یا کوکیز فعال نہیں ہیں
+
+
+ No token could be found.
+ کوئی ٹوکن نہیں مل سکا
+
+
+ Username could not be found.
+ يوذر نہیں مل سکا
+
+
+ Account has expired.
+ اکاؤنٹ کی میعاد ختم ہو گئی ہے
+
+
+ Credentials have expired.
+ اسناد کی میعاد ختم ہو چکی ہے
+
+
+ Account is disabled.
+ اکاؤنٹ بند کر دیا گیا ہے
+
+
+ Account is locked.
+ اکاؤنٹ لاک ہے
+
+
+ Too many failed login attempts, please try again later.
+ لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم بعد میں دوبارہ کوشش کریں
+
+
+ Invalid or expired login link.
+ غلط یا ختم شدھ لاگ ان لنک
+
+
+ Too many failed login attempts, please try again in %minutes% minute.
+ منٹ باد %minutes% لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم دوبارھ کوشيش کريں
+
+
+ Too many failed login attempts, please try again in %minutes% minutes.
+ منٹ باد %minutes% لاگ ان کی بہت زیادہ ناکام کوششیں ہو چکی ہیں، براۓ کرم دوبارھ کوشيش کريں
+
+
+
+
diff --git a/src/Symfony/Component/Security/Http/Logout/LogoutUrlGenerator.php b/src/Symfony/Component/Security/Http/Logout/LogoutUrlGenerator.php
index 0ec1d60c90649..49638f3ced344 100644
--- a/src/Symfony/Component/Security/Http/Logout/LogoutUrlGenerator.php
+++ b/src/Symfony/Component/Security/Http/Logout/LogoutUrlGenerator.php
@@ -107,6 +107,10 @@ private function generateLogoutUrl(?string $key, int $referenceType): string
$request = $this->requestStack->getCurrentRequest();
+ if (!$request) {
+ throw new \LogicException('Unable to generate the logout URL without a Request.');
+ }
+
$url = UrlGeneratorInterface::ABSOLUTE_URL === $referenceType ? $request->getUriForPath($logoutPath) : $request->getBaseUrl().$logoutPath;
if (!empty($parameters)) {
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf
index 61b9eac232ca1..d1dcf3ec8fa50 100644
--- a/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.af.xlf
@@ -382,6 +382,22 @@
This value is not a valid International Securities Identification Number (ISIN).Hierdie waarde is nie 'n geldige Internasionale veiligheidsidentifikasienommer (ISIN) nie.
+
+ This value should be a valid expression.
+ Hierdie waarde moet 'n geldige uitdrukking wees.
+
+
+ This value is not a valid CSS color.
+ Hierdie waarde is nie 'n geldige CSS-kleur nie.
+
+
+ This value is not a valid CIDR notation.
+ Hierdie waarde is nie 'n geldige CIDR-notasie nie.
+
+
+ The value of the netmask should be between {{ min }} and {{ max }}.
+ Die waarde van die netmasker moet tussen {{ min }} en {{ max }} wees.
+
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf
index 59480874fd387..b3e0999304ae7 100644
--- a/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.az.xlf
@@ -386,6 +386,22 @@
This value is not a valid International Securities Identification Number (ISIN).Bu dəyər doğru bir Qiymətli Kağızın Beynəlxalq İdentifikasiya Kodu (ISIN) deyil.
+
+ This value should be a valid expression.
+ Bu dəyər etibarlı ifadə olmalıdır.
+
+
+ This value is not a valid CSS color.
+ Bu dəyər etibarlı CSS rəngi deyil.
+
+
+ This value is not a valid CIDR notation.
+ Bu dəyər etibarlı CIDR notasiyası deyil.
+
+
+ The value of the netmask should be between {{ min }} and {{ max }}.
+ Şəbəkə maskasının dəyəri {{ min }} və {{ max }} arasında olmalıdır.
+
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf
new file mode 100644
index 0000000000000..c2b114942972f
--- /dev/null
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.ur.xlf
@@ -0,0 +1,407 @@
+
+
+
+
+
+ This value should be false.
+ یہ ويليو غلط ہونی چاہیے
+
+
+ This value should be true.
+ یہ ويليو درست ہونی چاہیے
+
+
+ This value should be of type {{ type }}.
+ قسم کی ہونی چاہیے {{type}} يھ ويليو
+
+
+ This value should be blank.
+ یہ ويليو خالی ہونی چاہیے
+
+
+ The value you selected is not a valid choice.
+ آپ نے جو ويليو منتخب کی ہے وہ درست انتخاب نہیں ہے
+
+
+ You must select at least {{ limit }} choice.|You must select at least {{ limit }} choices.
+ کا انتخاب کرنا چاہیے {{limit}} کا انتخاب کرنا چاہیے ۔آّپ کو کم اذ کم {{limit}} آپ کو کم از کم
+
+
+ You must select at most {{ limit }} choice.|You must select at most {{ limit }} choices.
+ کا انتخاب کرنا چاہیے {{limit}} کا انتخاب کرنا چاہیے ۔آّپ کو ذيادھ سے ذيادھ {{limit}} آپ کو ذيادھ سے ذيادھ
+
+
+ One or more of the given values is invalid.
+ دی گئی ويليوذ میں سے ایک یا زیادھ ويليوذ غلط ہیں
+
+
+ This field was not expected.
+ اس فیلڈ کی توقع نہیں تھی
+
+
+ This field is missing.
+ یہ فیلڈ غائب ہے
+
+
+ This value is not a valid date.
+ یہ ويليو درست تاریخ نہیں ہے
+
+
+ This value is not a valid datetime.
+ یہ ويليو درست تاریخ وقت نہیں ہے
+
+
+ This value is not a valid email address.
+ یہ ويليو درست ای میل ایڈریس نہیں ہے
+
+
+ The file could not be found.
+ فائل نہیں مل سکی
+
+
+ The file is not readable.
+ فائل پڑھنے کے قابل نہیں ہے
+
+
+ The file is too large ({{ size }} {{ suffix }}). Allowed maximum size is {{ limit }} {{ suffix }}.
+ {{ suffix }} {{ limit }} زیادہ سے زیادہ سائز کی اجازت ہے {{ suffix }}) ({{ size }} فائل بہت بڑی ہے
+
+
+ The mime type of the file is invalid ({{ type }}). Allowed mime types are {{ types }}.
+ ہیں {{ types }} مائیم کی قسمیں ({{ type }}) فائل کی ماۂيم قسم غلط ہے
+
+
+ This value should be {{ limit }} or less.
+ یا اس سے کم ہونی چاہیے {{ limit }} یہ ويليو
+
+
+ This value is too long. It should have {{ limit }} character or less.|This value is too long. It should have {{ limit }} characters or less.
+ حروف یا اس سے کم ہونے چاہئیں {{ limit }} حرف یا اس سے کم ہونا چاہیے۔|یہ ويليو بہت لمبی ہے۔ اس میں{{ limit }} یہ ويليو بہت لمبی ہے۔ اس میں
+
+
+ This value should be {{ limit }} or more.
+ یا اس سے زیادہ ہونی چاہیے {{ limit }} یہ ويليو
+
+
+ This value is too short. It should have {{ limit }} character or more.|This value is too short. It should have {{ limit }} characters or more.
+ حروف یا اس سے زیادہ ہونے چاہئیں {{ limit }} حرف یا اس سے زیادہ ہونا چاہیے۔|یہ ويليو بہت چھوٹی ہے۔ اس میں{{ limit }} یہ ويليو بہت مختصر ہے۔ اس میں
+
+
+ This value should not be blank.
+ یہ ويليو خالی نہیں ہونی چاہیے
+
+
+ This value should not be null.
+ یہ ويليو خالی نہیں ہونی چاہیے
+
+
+ This value should be null.
+ یہ ويليو خالی ہونی چاہیے
+
+
+ This value is not valid.
+ یہ ويليو درست نہیں ہے
+
+
+ This value is not a valid time.
+ یہ ويليو درست وقت نہیں ہے
+
+
+ This value is not a valid URL.
+ نہیں ہے URL یہ ويليو درست
+
+
+ The two values should be equal.
+ دونوں ويليوذ برابر ہونی چاہئیں
+
+
+ The file is too large. Allowed maximum size is {{ limit }} {{ suffix }}.
+ {{ suffix }} {{ limit }} فائل بہت بڑی ہے۔ زیادہ سے زیادہ سائز کی اجازت ہے
+
+
+ The file is too large.
+ فائل بہت بڑی ہے
+
+
+ The file could not be uploaded.
+ فائل اپ لوڈ نہیں ہو سکی
+
+
+ This value should be a valid number.
+ یہ ويليو ایک درست نمبر ہونی چاہیے
+
+
+ This file is not a valid image.
+ یہ فائل درست تصویر نہیں ہے
+
+
+ This is not a valid IP address.
+ ایڈریس نہیں ہے IP یہ ایک درست
+
+
+ This value is not a valid language.
+ یہ ويليو درست زبان نہیں ہے
+
+
+ This value is not a valid locale.
+ یہ ويليو درست مقام نہیں ہے
+
+
+ This value is not a valid country.
+ یہ ويليو ایک درست ملک نہیں ہے
+
+
+ This value is already used.
+ یہ ويليو پہلے ہی استعمال ہو چکی ہے
+
+
+ The size of the image could not be detected.
+ تصویر کے سائز کا پتہ نہیں چل سکا
+
+
+ The image width is too big ({{ width }}px). Allowed maximum width is {{ max_width }}px.
+ ہے {{ max_width }}px اجازت دی گئی زیادہ سے زیاد چوڑائی ({{ width }}px) تصویر کی چوڑائی بہت بڑی ہے
+
+
+ The image width is too small ({{ width }}px). Minimum width expected is {{ min_width }}px.
+ ہے {{ min_width }}px کم از کم چوڑائی متوقع({{ width }}px) تصویر کی چوڑائی بہت چھوٹی ہے
+
+
+ The image height is too big ({{ height }}px). Allowed maximum height is {{ max_height }}px.
+ ہے {{ max_height }}px اجازت دی گئی زیادہ سے زیاد اونچائی ({{ height }}px) تصویر کی اونچائی بہت بڑی ہے
+
+
+ The image height is too small ({{ height }}px). Minimum height expected is {{ min_height }}px.
+ ہے {{ min_height }}px متوقع کم از کم اونچائی ({{ height }}px) تصویر کی اونچائی بہت چھوٹی ہے
+
+
+ This value should be the user's current password.
+ یہ ويليو صارف کا موجودہ پاس ورڈ ہونا چاہیے
+
+
+ This value should have exactly {{ limit }} character.|This value should have exactly {{ limit }} characters.
+ حروف ہونے چاہئیں {{ limit }} حرف ہونا چاہیے۔|اس ويليو میں بالکل {{ limit }} اس ويليو میں بالکل
+
+
+ The file was only partially uploaded.
+ فائل صرف جزوی طور پر اپ لوڈ کی گئی تھی
+
+
+ No file was uploaded.
+ کوئی فائل اپ لوڈ نہیں کی گئی
+
+
+ No temporary folder was configured in php.ini.
+ میں کوئی عارضی فولڈر کنفیگر نہیں کیا گیا، یا کنفیگرڈ فولڈر موجود نہیں ہے php.ini
+
+
+ Cannot write temporary file to disk.
+ عارضی فائل کو ڈسک پر نہیں لکھا جا سکتا
+
+
+ A PHP extension caused the upload to fail.
+ پی ایچ پی کی توسیع کی وجہ سے اپ لوڈ ناکام ہو گیا
+
+
+ This collection should contain {{ limit }} element or more.|This collection should contain {{ limit }} elements or more.
+ عناصر یا اس سے زیادہ ہونا چاہیے {{ limit } عنصر یا اس سے زیادہ ہونا چاہیے۔|اس مجموعہ میں {{ limit }} اس مجموعہ میں
+
+
+ This collection should contain {{ limit }} element or less.|This collection should contain {{ limit }} elements or less.
+ عناصر یا اس سے کم ہونا چاہیے {{ limit } عنصر یا اس سے کم ہونا چاہیے۔|اس مجموعہ میں {{ limit }} اس مجموعہ میں
+
+
+ This collection should contain exactly {{ limit }} element.|This collection should contain exactly {{ limit }} elements.
+ عنصر ہونا چاہیے {{ limit }} عنصر ہونا چاہیے۔|اس مجموعے میں بالکل {{ limit }} اس مجموعہ میں بالکل
+
+
+ Invalid card number.
+ غلط کارڈ نمبر
+
+
+ Unsupported card type or invalid card number.
+ غیر تعاون یافتہ کارڈ کی قسم یا غلط کارڈ نمبر
+
+
+ This is not a valid International Bank Account Number (IBAN).
+ (IBAN)یہ ایک درست بین الاقوامی بینک اکاؤنٹ نمبر نہیں ہے
+
+
+ This value is not a valid ISBN-10.
+ نہیں ہے ISBN-10 یھ ويليو درست۔
+
+
+ This value is not a valid ISBN-13.
+ نہیں ہے ISBN-13 یھ ويليو درست۔
+
+
+ This value is neither a valid ISBN-10 nor a valid ISBN-13.
+ ISBN-13 ے اور نہ ہی درست ISBN-10 یہ ويليو نہ تو درست
+
+
+ This value is not a valid ISSN.
+ نہیں ہے ISSNیھ ويليو درست۔
+
+
+ This value is not a valid currency.
+ یہ ويليو درست کرنسی نہیں ہے
+
+
+ This value should be equal to {{ compared_value }}.
+ کے برابر ہونا چاہیے {{ compared_value }} یھ ويليو
+
+
+ This value should be greater than {{ compared_value }}.
+ سے بڈي ہوني چاہیے {{ compared_value }} یھ ويليو
+
+
+ This value should be greater than or equal to {{ compared_value }}.
+ سے بڈي یا برابر ہوني چاہیے {{ compared_value }} یھ ويليو
+
+
+ This value should be identical to {{ compared_value_type }} {{ compared_value }}.
+ {{ compared_value }} {{ compared_value_type }} یہ ويليو ایک جیسی ہونی چاہیے۔
+
+
+ This value should be less than {{ compared_value }}.
+ سے کم ہوني چاہیے {{ compared_value }} یھ ويليو
+
+
+ This value should be less than or equal to {{ compared_value }}.
+ سے کم یا برابر ہوني چاہیے {{ compared_value }} یھ ويليو
+
+
+ This value should not be equal to {{ compared_value }}.
+ کے برابر نھيں ہوني چاہیے {{ compared_value }} یھ ويليو
+
+
+ This value should not be identical to {{ compared_value_type }} {{ compared_value }}.
+ ایک جیسی نیيں ہونی چاہیے {{ compared_value }} {{ compared_value_type }} یہ ويليو
+
+
+ The image ratio is too big ({{ ratio }}). Allowed maximum ratio is {{ max_ratio }}.
+ ہے {{ max_ratio }} اجازت شدہ زیادہ سے زیادہ تناسب ({{ ratio }}) تصویر کا تناسب بہت بڑا ہے
+
+
+ The image ratio is too small ({{ ratio }}). Minimum ratio expected is {{ min_ratio }}.
+ ہے{{ min_ratio }} ratio متوقع کم از کم ({{ ratio }}) بہت چھوٹا ہے ratio تصویر کا
+
+
+ The image is square ({{ width }}x{{ height }}px). Square images are not allowed.
+ مربع تصاویر کی اجازت نہیں ہے (px{{ height }}x{{ width }}) تصویر مربع ہے
+
+
+ The image is landscape oriented ({{ width }}x{{ height }}px). Landscape oriented images are not allowed.
+ زمین کی تزئین پر مبنی تصاویر کی اجازت نہیں ہے ({{ width }}x{{ height }}px) تصویر زمین کی تزئین پر مبنی ہے
+
+
+ The image is portrait oriented ({{ width }}x{{ height }}px). Portrait oriented images are not allowed.
+ پورٹریٹ پر مبنی تصاویر کی اجازت نہیں ہے ({{ width }}x{{ height }}px) تصویر پورٹریٹ پر مبنی ہے
+
+
+ An empty file is not allowed.
+ خالی فائل کی اجازت نہیں ہے
+
+
+ The host could not be resolved.
+ میزبان حل نہیں ہو سکا
+
+
+ This value does not match the expected {{ charset }} charset.
+ کے جيسي نہیں ہے charset {{ charset }} یہ ويليو متوقع
+
+
+ This is not a valid Business Identifier Code (BIC).
+ (BIC)یہ ایک درست کاروباری شناخت کنندہ کوڈ نہیں ہے
+
+
+ Error
+ خرابی
+
+
+ This is not a valid UUID.
+ نہیں ہے UUID یہ درست
+
+
+ This value should be a multiple of {{ compared_value }}.
+ کا ضرب ہوني چاہیے {{ compared_value }} یہ ويليو
+
+
+ This Business Identifier Code (BIC) is not associated with IBAN {{ iban }}.
+ سے وابستہ نہیں ہے IBAN {{ iban }} (BIC) یہ کاروباری شناختی کوڈ
+
+
+ This value should be valid JSON.
+ ہونی چاہیے JSON یہ ويليو درست
+
+
+ This collection should contain only unique elements.
+ یہ مجموعہ صرف منفرد عناصر پر مشتمل ہونا چاہیے
+
+
+ This value should be positive.
+ یہ ويليو مثبت ہونی چاہیے
+
+
+ This value should be either positive or zero.
+ یہ ويليو یا تو مثبت یا صفر ہونی چاہیے
+
+
+ This value should be negative.
+ یہ ويليو منفی ہونی چاہیے
+
+
+ This value should be either negative or zero.
+ یہ ويليو یا تو منفی یا صفر ہونی چاہیے
+
+
+ This value is not a valid timezone.
+ یہ ويليو درست ٹائم زون نہیں ہے
+
+
+ This password has been leaked in a data breach, it must not be used. Please use another password.
+ یہ پاس ورڈ ڈیٹا کی خلاف ورزی میں لیک ہو گیا ہے، اسے استعمال نہیں کرنا چاہیے۔ براۓ کرم دوسرا پاس ورڈ استعمال کریں
+
+
+ This value should be between {{ min }} and {{ max }}.
+ کے درمیان ہونی چاہیے {{ max }} اور {{ min }} یہ ويليو
+
+
+ This value is not a valid hostname.
+ نہیں ہے hostname یہ ويليو درست
+
+
+ The number of elements in this collection should be a multiple of {{ compared_value }}.
+ کی ضرب ہونی چاہیے {{ compared_value }} اس مجموعہ میں عناصر کی تعداد
+
+
+ This value should satisfy at least one of the following constraints:
+ اس ويليو کو درج ذیل رکاوٹوں میں سے کم از کم ایک کو پورا کرنا چاہیے
+
+
+ Each element of this collection should satisfy its own set of constraints.
+ اس مجموعے کے ہر عنصر کو اپنی پابندیوں کے سیٹ کو پورا کرنا چاہیے
+
+
+ This value is not a valid International Securities Identification Number (ISIN).
+ نہیں ہے (ISIN) یہ ويليو درست بین الاقوامی سیکیورٹیز شناختی نمبر
+
+
+ This value should be a valid expression.
+ یہ ويليو ایک درست اظہار ہوني چاہیے
+
+
+ This value is not a valid CSS color.
+ رنگ نہیں ہے CSS یہ ويليو درست
+
+
+ This value is not a valid CIDR notation.
+ نوٹیشن نہیں ہے CIDR یہ ويليو ایک درست
+
+
+ The value of the netmask should be between {{ min }} and {{ max }}.
+ کے درمیان ہونی چاہیے {{ max }} اور {{ min }} نیٹ ماسک کی ويليو
+
+