diff --git a/CHANGELOG-4.3.md b/CHANGELOG-4.3.md
index 9d60553f2e..0d18622314 100644
--- a/CHANGELOG-4.3.md
+++ b/CHANGELOG-4.3.md
@@ -7,6 +7,91 @@ in 4.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/v4.3.0...v4.3.1
+* 4.3.5 (2019-10-07)
+
+ * bug #33742 [Crawler] document $default as string|null (nicolas-grekas)
+ * bug #32308 [Messenger] DoctrineTransport: ensure auto setup is only done once (bendavies)
+ * bug #33871 [HttpClient] bugfix exploding values of headers (michaljusiega)
+ * bug #33834 [Validator] Fix ValidValidator group cascading usage (fancyweb)
+ * bug #33863 [Routing] gracefully handle docref_root ini setting (nicolas-grekas)
+ * bug #33846 [Cache] give 100ms before starting the expiration countdown (nicolas-grekas)
+ * bug #33853 [HttpClient] fix "no_proxy" option ignored in NativeHttpClient (Harry-Dunne)
+ * bug #33841 [VarDumper] fix dumping uninitialized SplFileInfo (nicolas-grekas)
+ * bug #33842 [Cache] fix logger usage in CacheTrait::doGet() (nicolas-grekas)
+ * bug #33835 [Workflow] Fixed BC break on WorkflowInterface (lyrixx)
+ * bug #33799 [Security]: Don't let falsy usernames slip through impersonation (j4nr6n)
+ * bug #33814 [HttpFoundation] Check if data passed to SessionBagProxy::initialize is an array (mynameisbogdan)
+ * bug #33744 [DI] Add CSV env var processor tests / support PHP 7.4 (ro0NL)
+ * bug #33805 [FrameworkBundle] Fix wrong returned status code in ConfigDebugCommand (jschaedl)
+ * bug #33781 [AnnotationCacheWarmer] add RedirectController to annotation cache (jenschude)
+ * bug #33777 Fix the :only-of-type pseudo class selector (jakzal)
+ * bug #32051 [Serializer] Add CsvEncoder tests for PHP 7.4 (ro0NL)
+ * feature #33776 Copy phpunit.xsd to a predictable path (julienfalque)
+ * bug #33759 [Security/Http] fix parsing X509 emailAddress (nicolas-grekas)
+ * bug #33733 [Serializer] fix denormalization of string-arrays with only one element (mkrauser)
+ * bug #33754 [Cache] fix known tag versions ttl check (SwenVanZanten)
+ * bug #33646 [HttpFoundation] allow additinal characters in not raw cookies (marie)
+ * bug #33748 [Console] Do not include hidden commands in suggested alternatives (m-vo)
+ * bug #33625 [DependencyInjection] Fix wrong exception when service is synthetic (k0d3r1s)
+ * bug #32979 [Messenger] return empty envelopes when RetryableException occurs (surikman)
+ * bug #32522 [Validator] Accept underscores in the URL validator, as the URL will load (battye)
+ * bug #32437 Fix toolbar load when GET params are present in "_wdt" route (Molkobain)
+ * bug #32925 [Translation] Collect original locale in case of fallback translation (digilist)
+ * bug #33691 [HttpClient] fix race condition when reading response with informational status (nicolas-grekas)
+ * bug #33727 [HttpClient] workaround bad Content-Length sent by old libcurl (nicolas-grekas)
+ * bug #31198 [FrameworkBundle] Fix framework bundle lock configuration not working as expected (HypeMC)
+ * bug #33719 [Cache] dont override native Memcached options (nicolas-grekas)
+ * bug #33703 [Cache] fail gracefully when locking is not supported (nicolas-grekas)
+ * bug #33713 Fix exceptions (PDOException) error code type (fruty)
+ * bug #32335 [Form] Names for buttons should start with lowercase (mcfedr)
+ * bug #33706 [Mailer][Messenger] ensure legacy event dispatcher compatibility (xabbuh)
+ * bug #33688 Add missing row_attr option to FormType (mcsky)
+ * bug #33693 [Security] use LegacyEventDispatcherProxy (dmaicher)
+ * bug #33675 [PhpUnit] Fix usleep mock return value (fabpot)
+ * bug #33652 [Cache] skip igbinary on PHP 7.4.0 (nicolas-grekas)
+ * bug #33643 [HttpClient] fix throwing HTTP exceptions when the 1st chunk is emitted (nicolas-grekas)
+ * bug #33618 fix tests depending on other components' tests (xabbuh)
+ * bug #33626 [PropertyInfo] ensure compatibility with type resolver 0.5 (xabbuh)
+ * bug #33620 [Twig] Fix Twig config extra keys (fabpot)
+ * bug #33600 [Messenger] Fix exception message of failed message is dropped on retry (tienvx)
+ * bug #33601 [HttpClient] Add default value for Accept header (numerogeek)
+ * bug #33340 [Finder] Adjust regex to correctly match comments in gitignore contents (Jeroeny)
+ * bug #33588 [PropertyInfo] ensure compatibility with type resolver 0.5 (xabbuh)
+ * bug #33575 [WebProfilerBundle] Fix time panel legend buttons (fancyweb)
+ * bug #33571 [Inflector] add support 'see' to 'ee' for singularize 'fees' to 'fee' (maxhelias)
+ * bug #32763 [Console] Get dimensions from stty on windows if possible (rtek)
+ * bug #33570 Fixed cache pools affecting each other due to an overwritten seed variable (roed)
+ * bug #33517 [Yaml] properly catch legacy tag syntax usages (xabbuh)
+ * bug #33546 [DependencyInjection] Accept existing interfaces as valid named args (fancyweb)
+ * bug #33547 [HttpClient] Re-enable Server Push support (dunglas)
+ * bug #33521 Fixed incompatibility between ServiceSubscriberTrait and classes with protected $container property (a-menshchikov)
+ * bug #33518 [Yaml] don't dump a scalar tag value on its own line (xabbuh)
+ * bug #33505 [HttpClient] fallbackto CURLMOPT_MAXCONNECTS when CURLMOPT_MAX_HOST_CONNECTIONS is not available (nicolas-grekas)
+ * bug #32818 [HttpKernel] Fix getFileLinkFormat() to avoid returning the wrong URL in Profiler (Arman-Hosseini)
+ * bug #33487 [HttpKernel] Fix Apache mod_expires Session Cache-Control issue (pbowyer)
+ * bug #33469 [FrameworkBundle] Fixed suggested package for missing server:dump command (lyrixx)
+ * bug #31964 [Router] routing cache crash when using generator_class (dFayet)
+ * bug #33481 [Messenger] fix empty amqp body returned as false (Tobion)
+ * bug #33387 [Mailer] maintain sender/recipient name in SMTP envelopes (xabbuh)
+ * bug #33449 Fix gmail relay (Beno!t POLASZEK)
+ * bug #33391 [HttpClient] fix support for 103 Early Hints and other informational status codes (nicolas-grekas)
+ * bug #33444 [HttpClient] improve handling of HTTP/2 PUSH, disable it by default (nicolas-grekas)
+ * bug #33435 [Validator] Only handle numeric values in DivisibleBy (fancyweb)
+ * bug #33437 Fix #33427 (sylfabre)
+ * bug #33439 [Validator] Sync string to date behavior and throw a better exception (fancyweb)
+ * bug #33436 [DI] fix support for "!tagged_locator foo" (nicolas-grekas)
+ * bug #32903 [PHPUnit Bridge] Avoid registering listener twice (alexpott)
+ * bug #33432 [Mailer] Fix Mailgun support when a response is not JSON as expected (fabpot)
+ * bug #33402 [Finder] Prevent unintentional file locks in Windows (jspringe)
+ * bug #33376 [Mailer] Remove the default dispatcher in AbstractTransport (fabpot)
+ * bug #33357 [FrameworkBundle] Fix about command not showing .env vars (brentybh)
+ * bug #33396 Fix #33395 PHP 5.3 compatibility (kylekatarnls)
+ * bug #33363 [Routing] fix static route reordering when a previous dynamic route conflicts (nicolas-grekas)
+ * bug #33385 [Console] allow Command::getName() to return null (nicolas-grekas)
+ * bug #33353 Return null as Expire header if it was set to null (danrot)
+ * bug #33382 [ProxyManager] remove ProxiedMethodReturnExpression polyfill (nicolas-grekas)
+ * bug #33377 [Yaml] fix dumping not inlined scalar tag values (xabbuh)
+
* 4.3.4 (2019-08-26)
* bug #33335 [DependencyInjection] Fixed the `getServiceIds` implementation to always return aliases (pdommelen)
diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 963f9e9602..2cf905be32 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -6,36 +6,36 @@ Symfony is the result of the work of many people who made the code better
- Fabien Potencier (fabpot)
- Nicolas Grekas (nicolas-grekas)
- - Bernhard Schussek (bschussek)
- Christian Flothmann (xabbuh)
+ - Bernhard Schussek (bschussek)
- Tobias Schultze (tobion)
- Christophe Coevoet (stof)
- Robin Chalas (chalas_r)
- Jordi Boggiano (seldaek)
- - Victor Berchet (victor)
- Kévin Dunglas (dunglas)
+ - Victor Berchet (victor)
- Maxime Steinhausser (ogizanagi)
- Ryan Weaver (weaverryan)
- Javier Eguiluz (javier.eguiluz)
- - Jakub Zalas (jakubzalas)
- Roland Franssen (ro0)
+ - Jakub Zalas (jakubzalas)
- Johannes S (johannes)
- - Kris Wallsmith (kriswallsmith)
- Grégoire Pineau (lyrixx)
+ - Kris Wallsmith (kriswallsmith)
- Hugo Hamon (hhamon)
+ - Yonel Ceruto (yonelceruto)
- Abdellatif Ait boudad (aitboudad)
- Samuel ROZE (sroze)
- - Yonel Ceruto (yonelceruto)
- Romain Neutron (romain)
- Pascal Borreli (pborreli)
- Wouter De Jong (wouterj)
- Joseph Bielawski (stloyd)
- Karma Dordrak (drak)
- Lukas Kahwe Smith (lsmith)
+ - Alexander M. Turek (derrabus)
- Martin Hasoň (hason)
- Hamza Amrouche (simperfit)
- Jeremy Mikola (jmikola)
- - Alexander M. Turek (derrabus)
- Jean-François Simon (jfsimon)
- Jules Pietri (heah)
- Benjamin Eberlei (beberlei)
@@ -44,21 +44,21 @@ Symfony is the result of the work of many people who made the code better
- Eriksen Costa (eriksencosta)
- Guilhem Niot (energetick)
- Sarah Khalil (saro0h)
+ - Thomas Calvet (fancyweb)
- Tobias Nyholm (tobias)
- Jonathan Wage (jwage)
- Lynn van der Berg (kjarli)
- Diego Saint Esteben (dosten)
- - Thomas Calvet (fancyweb)
- Alexandre Salomé (alexandresalome)
- William Durand (couac)
- ornicar
+ - Pierre du Plessis (pierredup)
- Dany Maillard (maidmaid)
- Francis Besset (francisbesset)
- stealth35 (stealth35)
- Alexander Mols (asm89)
- - Pierre du Plessis (pierredup)
- - Matthias Pigulla (mpdude)
- Konstantin Myakshin (koc)
+ - Matthias Pigulla (mpdude)
- Bulat Shakirzyanov (avalanche123)
- Grégoire Paris (greg0ire)
- Saša Stamenković (umpirsky)
@@ -69,13 +69,13 @@ Symfony is the result of the work of many people who made the code better
- Miha Vrhovnik
- Diego Saint Esteben (dii3g0)
- Gábor Egyed (1ed)
- - Konstantin Kudryashov (everzet)
- Titouan Galopin (tgalopin)
+ - Konstantin Kudryashov (everzet)
+ - David Maicher (dmaicher)
- Bilal Amarni (bamarni)
- Mathieu Piot (mpiot)
- - David Maicher (dmaicher)
- - Florin Patan (florinpatan)
- Gabriel Ostrolucký (gadelat)
+ - Florin Patan (florinpatan)
- Vladimir Reznichenko (kalessil)
- Jáchym Toušek (enumag)
- Michel Weimerskirch (mweimerskirch)
@@ -83,6 +83,7 @@ Symfony is the result of the work of many people who made the code better
- Issei Murasawa (issei_m)
- Eric Clemmons (ericclemmons)
- Charles Sarrazin (csarrazi)
+ - Jan Schädlich (jschaedl)
- Christian Raue
- Arnout Boks (aboks)
- Deni
@@ -90,7 +91,6 @@ Symfony is the result of the work of many people who made the code better
- Dariusz Górecki (canni)
- Douglas Greenshields (shieldo)
- David Buchmann (dbu)
- - Jan Schädlich (jschaedl)
- Dariusz Ruminski
- Lee McDermott
- Brandon Turner
@@ -114,30 +114,30 @@ Symfony is the result of the work of many people who made the code better
- Baptiste Clavié (talus)
- marc.weistroff
- Tomáš Votruba (tomas_votruba)
+ - Jérôme Vasseur (jvasseur)
- lenar
- Alexander Schwenn (xelaris)
- Włodzimierz Gajda (gajdaw)
- - Jérôme Vasseur (jvasseur)
+ - Sebastiaan Stok (sstok)
+ - Adrien Brault (adrienbrault)
- Peter Kokot (maastermedia)
- Jacob Dreesen (jdreesen)
- Florian Voutzinos (florianv)
- - Sebastiaan Stok (sstok)
- Colin Frei
- Javier Spagnoletti (phansys)
- - Adrien Brault (adrienbrault)
- Joshua Thijssen
- Daniel Wehner (dawehner)
- excelwebzone
- Gordon Franke (gimler)
+ - Teoh Han Hui (teohhanhui)
- Oskar Stark (oskarstark)
+ - Alex Pott
- Fabien Pennequin (fabienpennequin)
- Théo FIDRY (theofidry)
- - Teoh Han Hui (teohhanhui)
- Eric GELOEN (gelo)
- Joel Wurtz (brouznouf)
- Lars Strojny (lstrojny)
- Tugdual Saunier (tucksaun)
- - Alex Pott
- Jannik Zschiesche (apfelbox)
- Robert Schönthal (digitalkaoz)
- Florian Lonqueu-Brochard (florianlb)
@@ -152,6 +152,7 @@ Symfony is the result of the work of many people who made the code better
- Daniel Gomes (danielcsgomes)
- Hidenori Goto (hidenorigoto)
- Andréia Bohner (andreia)
+ - Julien Falque (julienfalque)
- Arnaud Kleinpeter (nanocom)
- Guilherme Blanco (guilhermeblanco)
- SpacePossum
@@ -160,7 +161,6 @@ Symfony is the result of the work of many people who made the code better
- François-Xavier de Guillebon (de-gui_f)
- Oleg Voronkovich
- Philipp Wahala (hifi)
- - Julien Falque (julienfalque)
- Rafael Dohms (rdohms)
- jwdeitch
- Mikael Pajunen
@@ -172,6 +172,7 @@ Symfony is the result of the work of many people who made the code better
- Richard Shank (iampersistent)
- Thomas Rabaix (rande)
- Vincent Touzet (vincenttouzet)
+ - Gregor Harlan (gharlan)
- jeremyFreeAgent (jeremyfreeagent)
- Rouven Weßling (realityking)
- Alexander Schranz (alexander-schranz)
@@ -193,6 +194,7 @@ Symfony is the result of the work of many people who made the code better
- James Halsall (jaitsu)
- Matthieu Napoli (mnapoli)
- Florent Mata (fmata)
+ - Arman Hosseini
- Warnar Boekkooi (boekkooi)
- Dmitrii Chekaliuk (lazyhammer)
- Clément JOBEILI (dator)
@@ -206,11 +208,11 @@ Symfony is the result of the work of many people who made the code better
- Mario A. Alvarez Garcia (nomack84)
- Dennis Benkert (denderello)
- DQNEO
- - Gregor Harlan (gharlan)
+ - mcfedr (mcfedr)
- Gary PEGEOT (gary-p)
- Ruben Gonzalez (rubenrua)
- Benjamin Dulau (dbenjamin)
- - Arman Hosseini
+ - Andreas Braun
- Mathieu Lemoine (lemoinem)
- Christian Schmidt
- Andreas Hucks (meandmymonkey)
@@ -241,7 +243,6 @@ Symfony is the result of the work of many people who made the code better
- jeff
- John Kary (johnkary)
- Andreas Schempp (aschempp)
- - Andreas Braun
- Justin Hileman (bobthecow)
- Blanchon Vincent (blanchonvincent)
- Michele Orselli (orso)
@@ -265,7 +266,6 @@ Symfony is the result of the work of many people who made the code better
- julien pauli (jpauli)
- Lorenz Schori
- Sébastien Lavoie (lavoiesl)
- - mcfedr (mcfedr)
- Dariusz
- Michael Babker (mbabker)
- Francois Zaninotto
@@ -314,12 +314,14 @@ Symfony is the result of the work of many people who made the code better
- Jhonny Lidfors (jhonne)
- Diego Agulló (aeoris)
- jdhoek
+ - Maxime Helias (maxhelias)
- David Prévot
- Bob den Otter (bopp)
- Thomas Schulz (king2500)
- Frank de Jonge (frenkynet)
- Nikita Konstantinov
- Wodor Wodorski
+ - dFayet
- Thomas Lallement (raziel057)
- Colin O'Dell (colinodell)
- Giorgio Premi
@@ -343,6 +345,7 @@ Symfony is the result of the work of many people who made the code better
- Christian Schmidt
- Patrick Landolt (scube)
- MatTheCat
+ - David Badura (davidbadura)
- Chad Sikorra (chadsikorra)
- Chris Smith (cs278)
- Florian Klein (docteurklein)
@@ -361,6 +364,7 @@ Symfony is the result of the work of many people who made the code better
- Jerzy Zawadzki (jzawadzki)
- Wouter J
- Ismael Ambrosi (iambrosi)
+ - Ruud Kamphuis (ruudk)
- Emmanuel BORGES (eborges78)
- Aurelijus Valeiša (aurelijus)
- Jan Decavele (jandc)
@@ -374,7 +378,6 @@ Symfony is the result of the work of many people who made the code better
- Francesc Rosàs (frosas)
- Romain Pierre (romain-pierre)
- Julien Galenski (ruian)
- - Maxime Helias
- Bongiraud Dominique
- janschoenherr
- Emanuele Gaspari (inmarelibero)
@@ -382,7 +385,6 @@ Symfony is the result of the work of many people who made the code better
- Berny Cantos (xphere81)
- Thierry Thuon (lepiaf)
- Ricard Clau (ricardclau)
- - dFayet
- Mark Challoner (markchalloner)
- Gennady Telegin (gtelegin)
- Erin Millard
@@ -410,10 +412,10 @@ Symfony is the result of the work of many people who made the code better
- Robbert Klarenbeek (robbertkl)
- Eric Masoero (eric-masoero)
- JhonnyL
- - David Badura (davidbadura)
- hossein zolfi (ocean)
- Clément Gautier (clementgautier)
- Thomas Bisignani (toma)
+ - Dāvis Zālītis (k0d3r1s)
- Sanpi
- Eduardo Gulias (egulias)
- giulio de donato (liuggio)
@@ -436,6 +438,7 @@ Symfony is the result of the work of many people who made the code better
- Tamas Szijarto
- Michele Locati
- Pavel Volokitin (pvolok)
+ - Valentine Boineau (valentineboineau)
- Arthur de Moulins (4rthem)
- Matthias Althaus (althaus)
- Nicolas Dewez (nicolas_dewez)
@@ -447,13 +450,13 @@ Symfony is the result of the work of many people who made the code better
- Joe Lencioni
- Daniel Tschinder
- vladimir.reznichenko
- - Ruud Kamphuis (ruudk)
- Kai
- Lee Rowlands
- Krzysztof Piasecki (krzysztek)
- Maximilian Reichel (phramz)
- Loick Piera (pyrech)
- Alain Hippolyte (aloneh)
+ - Grenier Kévin (mcsky_biig)
- Karoly Negyesi (chx)
- Ivan Kurnosov
- Xavier HAUSHERR
@@ -481,9 +484,11 @@ Symfony is the result of the work of many people who made the code better
- Jeanmonod David (jeanmonod)
- Christopher Davis (chrisguitarguy)
- Webnet team (webnet)
+ - Farhad Safarov
- Jan Schumann
- Niklas Fiekas
- Markus Bachmann (baachi)
+ - Kévin THERAGE (kevin_therage)
- lancergr
- Mihai Stancu
- Ivan Nikolaev (destillat)
@@ -499,6 +504,7 @@ Symfony is the result of the work of many people who made the code better
- EdgarPE
- Florian Pfitzer (marmelatze)
- Asier Illarramendi (doup)
+ - Sylvain Fabre (sylfabre)
- Martijn Cuppens
- Vlad Gregurco (vgregurco)
- Maciej Malarz (malarzm)
@@ -517,6 +523,7 @@ Symfony is the result of the work of many people who made the code better
- Tobias Weichart
- Gonzalo Vilaseca (gonzalovilaseca)
- Marcin Sikoń (marphi)
+ - Tien Vo (tienvx)
- Denis Brumann (dbrumann)
- Dominik Zogg (dominik.zogg)
- Marek Pietrzak
@@ -533,6 +540,7 @@ Symfony is the result of the work of many people who made the code better
- Anton Bakai
- Martin Auswöger
- Rhodri Pugh (rodnaph)
+ - battye
- Sam Fleming (sam_fleming)
- Alex Bakhturin
- Patrick Reimers (preimers)
@@ -606,7 +614,6 @@ Symfony is the result of the work of many people who made the code better
- Nate (frickenate)
- Timothée Barray (tyx)
- jhonnyL
- - Grenier Kévin (mcsky_biig)
- sasezaki
- Dawid Pakuła (zulusx)
- Florian Rey (nervo)
@@ -621,6 +628,7 @@ Symfony is the result of the work of many people who made the code better
- Kevin Saliou (kbsali)
- Shawn Iwinski
- Gawain Lynch (gawain)
+ - mmokhi
- NothingWeAre
- Ryan
- Alexander Deruwe (aderuwe)
@@ -643,9 +651,11 @@ Symfony is the result of the work of many people who made the code better
- Disquedur
- Michiel Boeckaert (milio)
- Geoffrey Tran (geoff)
+ - Kyle
- Jan Behrens
- Mantas Var (mvar)
- Chris Tanaskoski
+ - Terje Bråten
- Sebastian Krebs
- Piotr Stankowski
- Baptiste Leduc (bleduc)
@@ -669,6 +679,7 @@ Symfony is the result of the work of many people who made the code better
- Kyle Evans (kevans91)
- Charles-Henri Bruyand
- Max Rath (drak3)
+ - Oleg Andreyev
- Stéphane Escandell (sescandell)
- Konstantin S. M. Möllers (ksmmoellers)
- James Johnston
@@ -676,7 +687,6 @@ Symfony is the result of the work of many people who made the code better
- Alexandre Dupuy (satchette)
- Malte Blättermann
- Desjardins Jérôme (jewome62)
- - Kévin THERAGE (kevin_therage)
- Simeon Kolev (simeon_kolev9)
- Joost van Driel (j92)
- Jonas Elfering
@@ -693,7 +703,6 @@ Symfony is the result of the work of many people who made the code better
- Gunnstein Lye (glye)
- Maxime Douailin
- Jean Pasdeloup (pasdeloup)
- - Sylvain Fabre (sylfabre)
- Benjamin Cremer (bcremer)
- Javier López (loalf)
- Reinier Kip
@@ -712,6 +721,7 @@ Symfony is the result of the work of many people who made the code better
- DerManoMann
- Rostyslav Kinash
- Dennis Fridrich (dfridrich)
+ - Mardari Dorel (dorumd)
- Daisuke Ohata
- Vincent Simonin
- Alex Bogomazov (alebo)
@@ -730,6 +740,7 @@ Symfony is the result of the work of many people who made the code better
- Miquel Rodríguez Telep (mrtorrent)
- Sergey Kolodyazhnyy (skolodyazhnyy)
- umpirski
+ - M. Vondano
- Quentin de Longraye (quentinus95)
- Chris Heng (gigablah)
- Shaun Simmons (simshaun)
@@ -750,7 +761,7 @@ Symfony is the result of the work of many people who made the code better
- Kristijan Kanalas
- Stephan Vock
- Benjamin Zikarsky (bzikarsky)
- - battye
+ - Ruben Jacobs (rubenj)
- Simon Schick (simonsimcity)
- redstar504
- Tristan Roussel
@@ -799,6 +810,7 @@ Symfony is the result of the work of many people who made the code better
- Indra Gunawan (guind)
- Peter Ward
- Davide Borsatto (davide.borsatto)
+ - Markus Fasselt (digilist)
- Julien DIDIER (juliendidier)
- Dominik Ritter (dritter)
- Sebastian Grodzicki (sgrodzicki)
@@ -935,7 +947,6 @@ Symfony is the result of the work of many people who made the code better
- Benoît Bourgeois
- mantulo
- Stefan Kruppa
- - mmokhi
- corphi
- JoppeDC
- grizlik
@@ -1005,10 +1016,8 @@ Symfony is the result of the work of many people who made the code better
- Pablo Lozano (arkadis)
- Erik Saunier (snickers)
- Rootie
- - Kyle
- Daniel Alejandro Castro Arellano (lexcast)
- sensio
- - Terje Bråten
- Thomas Jarrand
- Antoine Bluchet (soyuka)
- Sebastien Morel (plopix)
@@ -1031,7 +1040,6 @@ Symfony is the result of the work of many people who made the code better
- The Whole Life to Learn
- Mikkel Paulson
- ergiegonzaga
- - Farhad Safarov
- Liverbool (liverbool)
- Sam Malone
- Phan Thanh Ha (haphan)
@@ -1039,7 +1047,9 @@ Symfony is the result of the work of many people who made the code better
- neghmurken
- xaav
- Mahmoud Mostafa (mahmoud)
+ - Julien Turby
- Ahmed Abdou
+ - Daniel Iwaniec
- Pieter
- Michael Tibben
- Billie Thompson
@@ -1115,6 +1125,7 @@ Symfony is the result of the work of many people who made the code better
- Chris Tiearney
- Oliver Hoff
- Ole Rößner (basster)
+ - rtek
- Faton (notaf)
- Tom Houdmont
- Per Sandström (per)
@@ -1133,6 +1144,7 @@ Symfony is the result of the work of many people who made the code better
- ilyes kooli
- gr1ev0us
- mlazovla
+ - Alejandro Diaz Torres
- Max Beutel
- Antanas Arvasevicius
- Pierre Dudoret
@@ -1152,6 +1164,7 @@ Symfony is the result of the work of many people who made the code better
- Ken Marfilla (marfillaster)
- benatespina (benatespina)
- Denis Kop
+ - HypeMC
- Jean-Guilhem Rouel (jean-gui)
- jfcixmedia
- Dominic Tubach
@@ -1167,6 +1180,7 @@ Symfony is the result of the work of many people who made the code better
- Soner Sayakci
- hugofonseca (fonsecas72)
- Marc Duboc (icemad)
+ - Matthias Krauser (mkrauser)
- Martynas Narbutas
- Toon Verwerft (veewee)
- Bailey Parker
@@ -1216,6 +1230,7 @@ Symfony is the result of the work of many people who made the code better
- Mathias STRASSER (roukmoute)
- Thomason, James
- Gordienko Vladislav
+ - marie
- Viacheslav Sychov
- Alexandre Quercia (alquerci)
- Helmut Hummel (helhum)
@@ -1307,8 +1322,8 @@ Symfony is the result of the work of many people who made the code better
- Ilia (aliance)
- Chris McCafferty (cilefen)
- Mo Di (modi)
- - Tien Vo (tienvx)
- Pablo Schläpfer
+ - SuRiKmAn
- Gert de Pagter
- Jelte Steijaert (jelte)
- David Négrier (moufmouf)
@@ -1319,11 +1334,13 @@ Symfony is the result of the work of many people who made the code better
- Alex Vasilchenko
- sez-open
- Xavier Coureau
+ - fruty
- ConneXNL
- Aharon Perkel
- matze
- Rubén Calvo (rubencm)
- Abdul.Mohsen B. A. A
+ - Swen van Zanten
- Benoît Burnichon
- pthompson
- Malaney J. Hill
@@ -1360,6 +1377,7 @@ Symfony is the result of the work of many people who made the code better
- sl_toto (sl_toto)
- Walter Dal Mut (wdalmut)
- abluchet
+ - Ruud Arentsen
- Matthieu
- Albin Kerouaton
- Sébastien HOUZÉ
@@ -1385,11 +1403,11 @@ Symfony is the result of the work of many people who made the code better
- Constantine Shtompel
- Jules Lamur
- Renato Mendes Figueiredo
+ - pdommelen
- Eric Stern
- ShiraNai7
- Cedrick Oka
- Antal Áron (antalaron)
- - Markus Fasselt (digilist)
- Vašek Purchart (vasek-purchart)
- Janusz Jabłoński (yanoosh)
- Fleuv
@@ -1408,6 +1426,7 @@ Symfony is the result of the work of many people who made the code better
- Andreas Frömer
- Philip Frank
- Lance McNearney
+ - Jeroen Spee (jeroens)
- Giorgio Premi
- ncou
- Ian Carroll
@@ -1420,6 +1439,7 @@ Symfony is the result of the work of many people who made the code better
- Luis Galeas
- Martin Pärtel
- Bastien Jaillot (bastnic)
+ - Daniel Rotter (danrot)
- Frédéric Bouchery (fbouchery)
- Patrick Daley (padrig)
- Xavier Briand (xavierbriand)
@@ -1440,7 +1460,6 @@ Symfony is the result of the work of many people who made the code better
- Daniel González Zaballos (dem3trio)
- Emmanuel Vella (emmanuel.vella)
- Guillaume BRETOU (guiguiboy)
- - Dāvis Zālītis (k0d3r1s)
- Carsten Nielsen (phreaknerd)
- Roger Guasch (rogerguasch)
- Jay Severson
@@ -1559,6 +1578,7 @@ Symfony is the result of the work of many people who made the code better
- povilas
- Gavin Staniforth
- Alessandro Tagliapietra (alex88)
+ - Andy Palmer (andyexeter)
- Biji (biji)
- Jérôme Tanghe (deuchnord)
- Alex Teterin (errogaht)
@@ -1606,7 +1626,6 @@ Symfony is the result of the work of many people who made the code better
- Jibé Barth (jibbarth)
- Matthew Foster (mfoster)
- Reyo Stallenberg (reyostallenberg)
- - Ruben Jacobs (rubenj)
- Paul Seiffert (seiffert)
- Vasily Khayrulin (sirian)
- Stefan Koopmanschap (skoop)
@@ -1648,6 +1667,7 @@ Symfony is the result of the work of many people who made the code better
- Peter Bex
- Manatsawin Hanmongkolchai
- Gunther Konig
+ - Joe Springe
- Mickael GOETZ
- Maciej Schmidt
- Dennis Væversted
@@ -1677,12 +1697,12 @@ Symfony is the result of the work of many people who made the code better
- me_shaon
- 蝦米
- Grayson Koonce (breerly)
- - Mardari Dorel (dorumd)
- Andrey Helldar (helldar)
- Karim Cassam Chenaï (ka)
- Maksym Slesarenko (maksym_slesarenko)
- Michal Kurzeja (mkurzeja)
- Nicolas Bastien (nicolas_bastien)
+ - Peter Bowyer (pbowyer)
- Nikola Svitlica (thecelavi)
- Denis (yethee)
- Andrew Zhilin (zhil)
@@ -1760,7 +1780,6 @@ Symfony is the result of the work of many people who made the code better
- Yannick Warnier (ywarnier)
- Kevin Decherf
- Jason Woods
- - Oleg Andreyev
- klemens
- dened
- Dmitry Korotovsky
@@ -1777,6 +1796,7 @@ Symfony is the result of the work of many people who made the code better
- taiiiraaa
- Trevor Suarez
- gedrox
+ - Bohan Yang
- Alan Bondarchuk
- Joe Bennett
- dropfen
@@ -1810,6 +1830,7 @@ Symfony is the result of the work of many people who made the code better
- Jan Marek (janmarek)
- Mark de Haan (markdehaan)
- Dan Patrick (mdpatrick)
+ - Geoffrey Monte (numerogeek)
- Pedro Magalhães (pmmaga)
- Rares Vlaseanu (raresvla)
- tante kinast (tante)
@@ -1907,6 +1928,7 @@ Symfony is the result of the work of many people who made the code better
- hainey
- Juan M Martínez
- Gilles Gauthier
+ - Pavinthan
- ddebree
- Kuba Werłos
- Gyula Szucs
@@ -2032,11 +2054,13 @@ Symfony is the result of the work of many people who made the code better
- jc
- BenjaminBeck
- Aurelijus Rožėnas
+ - Beno!t POLASZEK
- Jordan Hoff
- znerol
- Christian Eikermann
- Kai Eichinger
- Antonio Angelino
+ - Jens Schulze
- Matt Fields
- Niklas Keller
- Andras Debreczeni
@@ -2115,6 +2139,7 @@ Symfony is the result of the work of many people who made the code better
- Lebnik
- nsbx
- Shude
+ - Richard Hodgson
- Ondřej Führer
- Sema
- Elan Ruusamäe
@@ -2134,6 +2159,7 @@ Symfony is the result of the work of many people who made the code better
- Benjamin Long
- Ben Miller
- Peter Gribanov
+ - Matteo Galli
- kwiateusz
- jspee
- Ilya Bulakh
@@ -2172,6 +2198,7 @@ Symfony is the result of the work of many people who made the code better
- Lin Lu
- arduanov
- sualko
+ - Molkobain
- Bilge
- ADmad
- Nicolas Roudaire
@@ -2282,6 +2309,7 @@ Symfony is the result of the work of many people who made the code better
- Wouter Sioen (wouter_sioen)
- Xavier Amado (xamado)
- Jesper Søndergaard Pedersen (zerrvox)
+ - Alexander Menshchikov (zmey_kk)
- Florent Cailhol
- szymek
- Kovacs Nicolas
diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
index 651cdb9c3b..c34377fa0d 100644
--- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
@@ -544,7 +544,7 @@ class Configuration implements ConfigurationInterface
->scalarNode('cookie_domain')->end()
->enumNode('cookie_secure')->values([true, false, 'auto'])->end()
->booleanNode('cookie_httponly')->defaultTrue()->end()
- ->enumNode('cookie_samesite')->values([null, Cookie::SAMESITE_LAX, Cookie::SAMESITE_STRICT])->defaultNull()->end()
+ ->enumNode('cookie_samesite')->values([null, Cookie::SAMESITE_LAX, Cookie::SAMESITE_STRICT, Cookie::SAMESITE_NONE])->defaultNull()->end()
->booleanNode('use_cookies')->end()
->scalarNode('gc_divisor')->end()
->scalarNode('gc_probability')->defaultValue(1)->end()
diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php
index f7500f05e3..28103a3522 100644
--- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php
+++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RememberMeFactory.php
@@ -144,7 +144,7 @@ class RememberMeFactory implements SecurityFactoryInterface
if ('secure' === $name) {
$builder->enumNode($name)->values([true, false, 'auto'])->defaultValue('auto' === $value ? null : $value);
} elseif ('samesite' === $name) {
- $builder->enumNode($name)->values([null, Cookie::SAMESITE_LAX, Cookie::SAMESITE_STRICT])->defaultValue($value);
+ $builder->enumNode($name)->values([null, Cookie::SAMESITE_LAX, Cookie::SAMESITE_STRICT, Cookie::SAMESITE_NONE])->defaultValue($value);
} elseif (\is_bool($value)) {
$builder->booleanNode($name)->defaultValue($value);
} else {
diff --git a/src/Symfony/Component/Cache/Adapter/FilesystemTagAwareAdapter.php b/src/Symfony/Component/Cache/Adapter/FilesystemTagAwareAdapter.php
index 2e8f6419dc..615af35e13 100644
--- a/src/Symfony/Component/Cache/Adapter/FilesystemTagAwareAdapter.php
+++ b/src/Symfony/Component/Cache/Adapter/FilesystemTagAwareAdapter.php
@@ -11,12 +11,10 @@
namespace Symfony\Component\Cache\Adapter;
-use Symfony\Component\Cache\Exception\LogicException;
use Symfony\Component\Cache\Marshaller\DefaultMarshaller;
use Symfony\Component\Cache\Marshaller\MarshallerInterface;
use Symfony\Component\Cache\PruneableInterface;
use Symfony\Component\Cache\Traits\FilesystemTrait;
-use Symfony\Component\Filesystem\Filesystem;
/**
* Stores tag id <> cache id relationship as a symlink, and lookup on invalidation calls.
@@ -27,8 +25,8 @@ use Symfony\Component\Filesystem\Filesystem;
class FilesystemTagAwareAdapter extends AbstractTagAwareAdapter implements PruneableInterface
{
use FilesystemTrait {
- doSave as doSaveCache;
- doDelete as doDeleteCache;
+ doSave as private doSaveCache;
+ doDelete as private doDeleteCache;
}
/**
@@ -36,11 +34,6 @@ class FilesystemTagAwareAdapter extends AbstractTagAwareAdapter implements Prune
*/
private const TAG_FOLDER = 'tags';
- /**
- * @var Filesystem|null
- */
- private $fs;
-
public function __construct(string $namespace = '', int $defaultLifetime = 0, string $directory = null, MarshallerInterface $marshaller = null)
{
$this->marshaller = $marshaller ?? new DefaultMarshaller();
@@ -55,7 +48,6 @@ class FilesystemTagAwareAdapter extends AbstractTagAwareAdapter implements Prune
{
$failed = $this->doSaveCache($values, $lifetime);
- $fs = $this->getFilesystem();
// Add Tags as symlinks
foreach ($addTagData as $tagId => $ids) {
$tagFolder = $this->getTagFolder($tagId);
@@ -65,12 +57,15 @@ class FilesystemTagAwareAdapter extends AbstractTagAwareAdapter implements Prune
}
$file = $this->getFile($id);
- $fs->symlink($file, $this->getFile($id, true, $tagFolder));
+
+ if (!@symlink($file, $this->getFile($id, true, $tagFolder))) {
+ @unlink($file);
+ $failed[] = $id;
+ }
}
}
// Unlink removed Tags
- $files = [];
foreach ($removeTagData as $tagId => $ids) {
$tagFolder = $this->getTagFolder($tagId);
foreach ($ids as $id) {
@@ -78,10 +73,9 @@ class FilesystemTagAwareAdapter extends AbstractTagAwareAdapter implements Prune
continue;
}
- $files[] = $this->getFile($id, false, $tagFolder);
+ @unlink($this->getFile($id, false, $tagFolder));
}
}
- $fs->remove($files);
return $failed;
}
@@ -94,15 +88,12 @@ class FilesystemTagAwareAdapter extends AbstractTagAwareAdapter implements Prune
$ok = $this->doDeleteCache($ids);
// Remove tags
- $files = [];
- $fs = $this->getFilesystem();
foreach ($tagData as $tagId => $idMap) {
$tagFolder = $this->getTagFolder($tagId);
foreach ($idMap as $id) {
- $files[] = $this->getFile($id, false, $tagFolder);
+ @unlink($this->getFile($id, false, $tagFolder));
}
}
- $fs->remove($files);
return $ok;
}
@@ -113,33 +104,45 @@ class FilesystemTagAwareAdapter extends AbstractTagAwareAdapter implements Prune
protected function doInvalidate(array $tagIds): bool
{
foreach ($tagIds as $tagId) {
- $tagsFolder = $this->getTagFolder($tagId);
- if (!file_exists($tagsFolder)) {
+ if (!file_exists($tagsFolder = $this->getTagFolder($tagId))) {
continue;
}
- foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($tagsFolder, \FilesystemIterator::SKIP_DOTS)) as $itemLink) {
- if (!$itemLink->isLink()) {
- throw new LogicException('Expected a (sym)link when iterating over tag folder, non link found: '.$itemLink);
+ set_error_handler(static function () {});
+
+ try {
+ if (rename($tagsFolder, $renamed = substr_replace($tagsFolder, bin2hex(random_bytes(4)), -1))) {
+ $tagsFolder = $renamed.\DIRECTORY_SEPARATOR;
+ } else {
+ $renamed = null;
}
- $valueFile = $itemLink->getRealPath();
- if ($valueFile && file_exists($valueFile)) {
- @unlink($valueFile);
+ foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($tagsFolder, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::CURRENT_AS_PATHNAME)) as $itemLink) {
+ unlink(realpath($itemLink) ?: $itemLink);
+ unlink($itemLink);
}
- @unlink((string) $itemLink);
+ if (null === $renamed) {
+ continue;
+ }
+
+ $chars = '+-ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
+
+ for ($i = 0; $i < 38; ++$i) {
+ for ($j = 0; $j < 38; ++$j) {
+ rmdir($tagsFolder.$chars[$i].\DIRECTORY_SEPARATOR.$chars[$j]);
+ }
+ rmdir($tagsFolder.$chars[$i]);
+ }
+ rmdir($renamed);
+ } finally {
+ restore_error_handler();
}
}
return true;
}
- private function getFilesystem(): Filesystem
- {
- return $this->fs ?? $this->fs = new Filesystem();
- }
-
private function getTagFolder(string $tagId): string
{
return $this->getFile($tagId, false, $this->directory.self::TAG_FOLDER.\DIRECTORY_SEPARATOR).\DIRECTORY_SEPARATOR;
diff --git a/src/Symfony/Component/DomCrawler/Crawler.php b/src/Symfony/Component/DomCrawler/Crawler.php
index 57331af77a..f176d1c646 100644
--- a/src/Symfony/Component/DomCrawler/Crawler.php
+++ b/src/Symfony/Component/DomCrawler/Crawler.php
@@ -595,18 +595,18 @@ class Crawler implements \Countable, \IteratorAggregate
*
* Pass true as the 2nd argument to normalize whitespaces.
*
- * @param mixed $default When provided and the current node is empty, this value is returned and no exception is thrown
- * @param bool $normalizeWhitespace Whether whitespaces should be trimmed and normalized to single spaces
+ * @param string|null $default When not null: the value to return when the current node is empty
+ * @param bool $normalizeWhitespace Whether whitespaces should be trimmed and normalized to single spaces
*
* @return string The node value
*
* @throws \InvalidArgumentException When current node is empty
*/
- public function text(/* $default = null, bool $normalizeWhitespace = false */)
+ public function text(/* string $default = null, bool $normalizeWhitespace = false */)
{
if (!$this->nodes) {
- if (0 < \func_num_args()) {
- return func_get_arg(0);
+ if (0 < \func_num_args() && null !== func_get_arg(0)) {
+ return (string) func_get_arg(0);
}
throw new \InvalidArgumentException('The current node list is empty.');
@@ -624,17 +624,17 @@ class Crawler implements \Countable, \IteratorAggregate
/**
* Returns the first node of the list as HTML.
*
- * @param mixed $default When provided and the current node is empty, this value is returned and no exception is thrown
+ * @param string|null $default When not null: the value to return when the current node is empty
*
* @return string The node html
*
* @throws \InvalidArgumentException When current node is empty
*/
- public function html(/* $default = null */)
+ public function html(/* string $default = null */)
{
if (!$this->nodes) {
- if (0 < \func_num_args()) {
- return func_get_arg(0);
+ if (0 < \func_num_args() && null !== func_get_arg(0)) {
+ return (string) func_get_arg(0);
}
throw new \InvalidArgumentException('The current node list is empty.');
diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php
index ce23fbde42..376a00c11f 100644
--- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php
+++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php
@@ -40,7 +40,11 @@ final class DateTimeImmutableToDateTimeTransformer implements DataTransformerInt
throw new TransformationFailedException('Expected a \DateTimeImmutable.');
}
- return \DateTime::createFromFormat(\DateTime::RFC3339, $value->format(\DateTime::RFC3339));
+ if (\PHP_VERSION_ID >= 70300) {
+ return \DateTime::createFromImmutable($value);
+ }
+
+ return \DateTime::createFromFormat('U.u', $value->format('U.u'))->setTimezone($value->getTimezone());
}
/**
diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php
index 9313e4f178..c8b6549778 100644
--- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php
+++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformerTest.php
@@ -16,16 +16,33 @@ use Symfony\Component\Form\Extension\Core\DataTransformer\DateTimeImmutableToDat
class DateTimeImmutableToDateTimeTransformerTest extends TestCase
{
- public function testTransform()
+ /**
+ * @dataProvider provider
+ */
+ public function testTransform(\DateTime $expectedOutput, \DateTimeImmutable $input)
{
$transformer = new DateTimeImmutableToDateTimeTransformer();
- $input = new \DateTimeImmutable('2010-02-03 04:05:06 UTC');
- $expectedOutput = new \DateTime('2010-02-03 04:05:06 UTC');
$actualOutput = $transformer->transform($input);
- $this->assertInstanceOf(\DateTime::class, $actualOutput);
$this->assertEquals($expectedOutput, $actualOutput);
+ $this->assertEquals($expectedOutput->getTimezone(), $actualOutput->getTimezone());
+ }
+
+ public function provider()
+ {
+ return [
+ [
+ new \DateTime('2010-02-03 04:05:06 UTC'),
+ new \DateTimeImmutable('2010-02-03 04:05:06 UTC'),
+ ],
+ [
+ (new \DateTime('2019-10-07 +11:00'))
+ ->setTime(14, 27, 11, 10042),
+ (new \DateTimeImmutable('2019-10-07 +11:00'))
+ ->setTime(14, 27, 11, 10042),
+ ],
+ ];
}
public function testTransformEmpty()
@@ -43,16 +60,17 @@ class DateTimeImmutableToDateTimeTransformerTest extends TestCase
$transformer->transform(new \DateTime());
}
- public function testReverseTransform()
+ /**
+ * @dataProvider provider
+ */
+ public function testReverseTransform(\DateTime $input, \DateTimeImmutable $expectedOutput)
{
$transformer = new DateTimeImmutableToDateTimeTransformer();
- $input = new \DateTime('2010-02-03 04:05:06 UTC');
- $expectedOutput = new \DateTimeImmutable('2010-02-03 04:05:06 UTC');
$actualOutput = $transformer->reverseTransform($input);
- $this->assertInstanceOf(\DateTimeImmutable::class, $actualOutput);
$this->assertEquals($expectedOutput, $actualOutput);
+ $this->assertEquals($expectedOutput->getTimezone(), $actualOutput->getTimezone());
}
public function testReverseTransformEmpty()
diff --git a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php
index 32624c963f..3f6150ba9f 100644
--- a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php
+++ b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php
@@ -80,9 +80,9 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
}
$dotenvVars = [];
- foreach (explode(',', getenv('SYMFONY_DOTENV_VARS')) as $name) {
- if ('' !== $name && false !== $value = getenv($name)) {
- $dotenvVars[$name] = $value;
+ foreach (explode(',', $_SERVER['SYMFONY_DOTENV_VARS'] ?? $_ENV['SYMFONY_DOTENV_VARS'] ?? '') as $name) {
+ if ('' !== $name && isset($_ENV[$name])) {
+ $dotenvVars[$name] = $_ENV[$name];
}
}
diff --git a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/DoctrineIntegrationTest.php b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/DoctrineIntegrationTest.php
index 6770733964..fa05a43b0b 100644
--- a/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/DoctrineIntegrationTest.php
+++ b/src/Symfony/Component/Messenger/Tests/Transport/Doctrine/DoctrineIntegrationTest.php
@@ -21,29 +21,27 @@ use Symfony\Component\Messenger\Transport\Doctrine\Connection;
*/
class DoctrineIntegrationTest extends TestCase
{
+ /** @var \Doctrine\DBAL\Connection */
private $driverConnection;
+ /** @var Connection */
private $connection;
+ /** @var string */
+ private $sqliteFile;
- /**
- * @after
- */
- public function cleanup()
+ protected function setUp(): void
{
- @unlink(sys_get_temp_dir().'/symfony.messenger.sqlite');
- }
-
- /**
- * @before
- */
- public function createConnection()
- {
- $dsn = getenv('MESSENGER_DOCTRINE_DSN') ?: 'sqlite:///'.sys_get_temp_dir().'/symfony.messenger.sqlite';
+ $this->sqliteFile = sys_get_temp_dir().'/symfony.messenger.sqlite';
+ $dsn = getenv('MESSENGER_DOCTRINE_DSN') ?: 'sqlite:///'.$this->sqliteFile;
$this->driverConnection = DriverManager::getConnection(['url' => $dsn]);
$this->connection = new Connection([], $this->driverConnection);
- // call send to auto-setup the table
- $this->connection->setup();
- // ensure the table is clean for tests
- $this->driverConnection->exec('DELETE FROM messenger_messages');
+ }
+
+ protected function tearDown(): void
+ {
+ $this->driverConnection->close();
+ if (file_exists($this->sqliteFile)) {
+ unlink($this->sqliteFile);
+ }
}
public function testConnectionSendAndGet()
@@ -75,6 +73,7 @@ class DoctrineIntegrationTest extends TestCase
public function testItRetrieveTheFirstAvailableMessage()
{
+ $this->connection->setup();
// insert messages
// one currently handled
$this->driverConnection->insert('messenger_messages', [
@@ -108,6 +107,7 @@ class DoctrineIntegrationTest extends TestCase
public function testItCountMessages()
{
+ $this->connection->setup();
// insert messages
// one currently handled
$this->driverConnection->insert('messenger_messages', [
@@ -148,6 +148,7 @@ class DoctrineIntegrationTest extends TestCase
public function testItRetrieveTheMessageThatIsOlderThanRedeliverTimeout()
{
+ $this->connection->setup();
$twoHoursAgo = new \DateTime('now');
$twoHoursAgo->modify('-2 hours');
$this->driverConnection->insert('messenger_messages', [
@@ -173,10 +174,7 @@ class DoctrineIntegrationTest extends TestCase
public function testTheTransportIsSetupOnGet()
{
- // If the table does not exist and we call the get (i.e run messenger:consume) the table must be setup
- // so first delete the tables
- $this->driverConnection->exec('DROP TABLE messenger_messages');
-
+ $this->assertFalse($this->driverConnection->getSchemaManager()->tablesExist('messenger_messages'));
$this->assertNull($this->connection->get());
$this->connection->send('the body', ['my' => 'header']);
diff --git a/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php b/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php
index ea42b0a6fd..193e920c40 100644
--- a/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php
+++ b/src/Symfony/Component/Messenger/Transport/Doctrine/Connection.php
@@ -51,12 +51,14 @@ class Connection
private $configuration = [];
private $driverConnection;
private $schemaSynchronizer;
+ private $autoSetup;
public function __construct(array $configuration, DBALConnection $driverConnection, SchemaSynchronizer $schemaSynchronizer = null)
{
$this->configuration = array_replace_recursive(self::DEFAULT_OPTIONS, $configuration);
$this->driverConnection = $driverConnection;
$this->schemaSynchronizer = $schemaSynchronizer ?? new SingleDatabaseSynchronizer($this->driverConnection);
+ $this->autoSetup = $this->configuration['auto_setup'];
}
public function getConfiguration(): array
@@ -130,9 +132,7 @@ class Connection
public function get(): ?array
{
- if ($this->configuration['auto_setup']) {
- $this->setup();
- }
+ get:
$this->driverConnection->beginTransaction();
try {
$query = $this->createAvailableMessagesQueryBuilder()
@@ -169,6 +169,11 @@ class Connection
} catch (\Throwable $e) {
$this->driverConnection->rollBack();
+ if ($this->autoSetup && $e instanceof TableNotFoundException) {
+ $this->setup();
+ goto get;
+ }
+
throw $e;
}
}
@@ -212,6 +217,8 @@ class Connection
} else {
$this->driverConnection->getConfiguration()->setFilterSchemaAssetsExpression($assetFilter);
}
+
+ $this->autoSetup = false;
}
public function getMessageCount(): int
@@ -225,10 +232,6 @@ class Connection
public function findAll(int $limit = null): array
{
- if ($this->configuration['auto_setup']) {
- $this->setup();
- }
-
$queryBuilder = $this->createAvailableMessagesQueryBuilder();
if (null !== $limit) {
$queryBuilder->setMaxResults($limit);
@@ -243,10 +246,6 @@ class Connection
public function find($id): ?array
{
- if ($this->configuration['auto_setup']) {
- $this->setup();
- }
-
$queryBuilder = $this->createQueryBuilder()
->where('m.id = ?');
@@ -287,8 +286,12 @@ class Connection
$stmt = $this->driverConnection->prepare($sql);
$stmt->execute($parameters);
} catch (TableNotFoundException $e) {
+ if ($this->driverConnection->isTransactionActive()) {
+ throw $e;
+ }
+
// create table
- if (!$this->driverConnection->isTransactionActive() && $this->configuration['auto_setup']) {
+ if ($this->autoSetup) {
$this->setup();
}
// statement not prepared ? SQLite throw on exception on prepare if the table does not exist
diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf
index db534528d1..bfa9b1284e 100644
--- a/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf
+++ b/src/Symfony/Component/Validator/Resources/translations/validators.nb.xlf
@@ -334,6 +334,38 @@
Verdien er ikke gyldig JSON.
+
+
+ Samlingen kan kun inneholde unike elementer.
+
+
+
+ Denne verdien må være positiv.
+
+
+
+ Denne verdien må være positiv eller null.
+
+
+
+ Denne verdien må være negativ.
+
+
+
+ Denne verdien må være negativ eller null.
+
+
+
+ Verdien er ikke en gyldig tidssone.
+
+
+
+ Dette passordet er lekket i et datainnbrudd, det må ikke tas i bruk. Vennligst bruk et annet passord.
+
+
+
+ Verdien må være mellom {{ min }} og {{ max }}.
+