Merge branch '3.3' into 3.4

* 3.3: (21 commits)
  [appveyor] disable memory limit on composer up
  Remove some unused variables and properties
  Remove some unused variables, properties and methods
  fix some edge cases with indented blocks
  [ExpressionLanguage] Fix parse error on 5.3
  [HttpKernel] remove noisy frame in controller stack traces
  [DI] Fix circular-aliases message
  [ExpressionLanguage] throw an SyntaxError instead of letting a undefined index notice
  Prevent a loop in aliases within the `findDefinition` method
  Fix php doc in Table class
  bumped Symfony version to 3.3.15
  updated VERSION for 3.3.14
  updated CHANGELOG for 3.3.14
  bumped Symfony version to 2.8.33
  updated VERSION for 2.8.32
  updated CHANGELOG for 2.8.32
  bumped Symfony version to 2.7.40
  updated VERSION for 2.7.39
  update CONTRIBUTORS for 2.7.39
  updated CHANGELOG for 2.7.39
  ...
This commit is contained in:
Nicolas Grekas 2017-12-08 16:24:53 +01:00
commit e9f7461ba9
27 changed files with 247 additions and 66 deletions

View File

@ -7,6 +7,41 @@ in 3.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 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/v3.3.0...v3.3.1 To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v3.3.0...v3.3.1
* 3.3.14 (2017-12-04)
* bug #25304 [Bridge/PhpUnit] Prefer $_SERVER['argv'] over $argv (ricknox)
* bug #25308 [FrameworkBundle] Fix a bug where a color tag will be shown when passing an antislash (Simperfit)
* bug #25278 Fix for missing whitespace control modifier in form layout (kubawerlos)
* bug #25305 [Form][TwigBridge] Fix collision between view properties and form fields (yceruto)
* bug #25236 [Form][TwigBridge] Fix collision between view properties and form fields (yceruto)
* bug #25312 [DI] Fix deep-inlining of non-shared refs (nicolas-grekas)
* bug #25309 [Yaml] parse newlines in quoted multiline strings (xabbuh)
* bug #25241 [Yaml] do not eagerly filter comment lines (xabbuh)
* bug #25258 [link] Prevent warnings when running link with 2.7 (dunglas)
* bug #24750 [Validator] ExpressionValidator should use OBJECT_TO_STRING (Simperfit)
* bug #25232 [WebProfilerBundle] [TwigBundle] Fix Profiler breaking XHTML pages (tistre)
* bug #25209 [VarDumper] Dont use empty(), it chokes on eg GMP objects (nicolas-grekas)
* bug #25200 [HttpKernel] Arrays with scalar values passed to ESI fragment renderer throw deprecation notice (Simperfit)
* bug #25217 [Dotenv] Changed preg_match flags from null to 0 (deekthesqueak)
* bug #25203 [DI] Fix infinite loop in InlineServiceDefinitionsPass (nicolas-grekas)
* bug #25185 [Serializer] Do not cache attributes if `attributes` in context (sroze)
* bug #25182 [HttpFoundation] AutExpireFlashBag should not clear new flashes (Simperfit, sroze)
* bug #25179 [FrameworkBundle][Serializer] Remove YamlEncoder definition if Yaml component isn't installed (ogizanagi)
* bug #25163 [DI] Fix tracking of env vars in exceptions (nicolas-grekas)
* bug #25152 [Form] Don't rely on `Symfony\Component\HttpFoundation\File\File` if http-foundation isn't in FileType (issei-m)
* bug #24987 [Console] Fix global console flag when used in chain (Simperfit)
* bug #25146 [DI] Dont resolve envs in service ids (nicolas-grekas)
* bug #25113 [Routing] Fix "config-file-relative" annotation loader resources (nicolas-grekas, sroze)
* bug #25109 Make debug:container search command case-insensitive (jzawadzki)
* bug #25043 [Yaml] added ability for substitute aliases when mapping is on single line (Michał Strzelecki, xabbuh)
* bug #25102 [Form] Fixed ContextErrorException in FileType (chihiro-adachi)
* bug #25130 [DI] Fix handling of inlined definitions by ContainerBuilder (nicolas-grekas)
* bug #25094 [FrameworkBundle][DX] Display a nice error message if an enabled component is missing (derrabus)
* bug #25097 [Bridge\PhpUnit] Turn "preserveGlobalState" to false by default, revert "Blacklist" removal (nicolas-grekas)
* bug #25072 [Bridge/PhpUnit] Remove trailing "\n" from ClockMock::microtime(false) (joky)
* bug #25032 [Bridge\PhpUnit] Disable broken auto-require mechanism of phpunit (nicolas-grekas)
* bug #24956 Fix ambiguous pattern (weltling)
* 3.3.13 (2017-11-16) * 3.3.13 (2017-11-16)
* security #24995 Validate redirect targets using the session cookie domain (nicolas-grekas) * security #24995 Validate redirect targets using the session cookie domain (nicolas-grekas)

View File

@ -14,8 +14,8 @@ Symfony is the result of the work of many people who made the code better
- Victor Berchet (victor) - Victor Berchet (victor)
- Johannes S (johannes) - Johannes S (johannes)
- Jakub Zalas (jakubzalas) - Jakub Zalas (jakubzalas)
- Kris Wallsmith (kriswallsmith)
- Kévin Dunglas (dunglas) - Kévin Dunglas (dunglas)
- Kris Wallsmith (kriswallsmith)
- Ryan Weaver (weaverryan) - Ryan Weaver (weaverryan)
- Javier Eguiluz (javier.eguiluz) - Javier Eguiluz (javier.eguiluz)
- Maxime Steinhausser (ogizanagi) - Maxime Steinhausser (ogizanagi)
@ -29,8 +29,8 @@ Symfony is the result of the work of many people who made the code better
- Joseph Bielawski (stloyd) - Joseph Bielawski (stloyd)
- Karma Dordrak (drak) - Karma Dordrak (drak)
- Lukas Kahwe Smith (lsmith) - Lukas Kahwe Smith (lsmith)
- Martin Hasoň (hason)
- Roland Franssen (ro0) - Roland Franssen (ro0)
- Martin Hasoň (hason)
- Jeremy Mikola (jmikola) - Jeremy Mikola (jmikola)
- Jean-François Simon (jfsimon) - Jean-François Simon (jfsimon)
- Benjamin Eberlei (beberlei) - Benjamin Eberlei (beberlei)
@ -52,24 +52,24 @@ Symfony is the result of the work of many people who made the code better
- Peter Rehm (rpet) - Peter Rehm (rpet)
- Saša Stamenković (umpirsky) - Saša Stamenković (umpirsky)
- Henrik Bjørnskov (henrikbjorn) - Henrik Bjørnskov (henrikbjorn)
- Yonel Ceruto (yonelceruto)
- Miha Vrhovnik - Miha Vrhovnik
- Matthias Pigulla (mpdude) - Matthias Pigulla (mpdude)
- Diego Saint Esteben (dii3g0) - Diego Saint Esteben (dii3g0)
- Konstantin Kudryashov (everzet) - Konstantin Kudryashov (everzet)
- Bilal Amarni (bamarni) - Bilal Amarni (bamarni)
- Yonel Ceruto (yonelceruto)
- Dany Maillard (maidmaid)
- Kevin Bond (kbond) - Kevin Bond (kbond)
- Dany Maillard (maidmaid)
- Pierre du Plessis (pierredup)
- Florin Patan (florinpatan) - Florin Patan (florinpatan)
- Jérémy DERUSSÉ (jderusse) - Jérémy DERUSSÉ (jderusse)
- Pierre du Plessis (pierredup)
- Gábor Egyed (1ed) - Gábor Egyed (1ed)
- Michel Weimerskirch (mweimerskirch) - Michel Weimerskirch (mweimerskirch)
- Andrej Hudec (pulzarraider) - Andrej Hudec (pulzarraider)
- Alexander M. Turek (derrabus)
- Eric Clemmons (ericclemmons) - Eric Clemmons (ericclemmons)
- Jáchym Toušek (enumag) - Jáchym Toušek (enumag)
- Charles Sarrazin (csarrazi) - Charles Sarrazin (csarrazi)
- Alexander M. Turek (derrabus)
- Konstantin Myakshin (koc) - Konstantin Myakshin (koc)
- Christian Raue - Christian Raue
- Arnout Boks (aboks) - Arnout Boks (aboks)
@ -79,6 +79,7 @@ Symfony is the result of the work of many people who made the code better
- Titouan Galopin (tgalopin) - Titouan Galopin (tgalopin)
- Douglas Greenshields (shieldo) - Douglas Greenshields (shieldo)
- Tobias Nyholm (tobias) - Tobias Nyholm (tobias)
- Issei Murasawa (issei_m)
- Lee McDermott - Lee McDermott
- Brandon Turner - Brandon Turner
- Luis Cordova (cordoval) - Luis Cordova (cordoval)
@ -91,13 +92,14 @@ Symfony is the result of the work of many people who made the code better
- John Wards (johnwards) - John Wards (johnwards)
- Dariusz Ruminski - Dariusz Ruminski
- Fran Moreno (franmomu) - Fran Moreno (franmomu)
- Issei Murasawa (issei_m)
- Antoine Hérault (herzult) - Antoine Hérault (herzult)
- Paráda József (paradajozsef) - Paráda József (paradajozsef)
- Arnaud Le Blanc (arnaud-lb) - Arnaud Le Blanc (arnaud-lb)
- Maxime STEINHAUSSER - Maxime STEINHAUSSER
- Michal Piotrowski (eventhorizon) - Michal Piotrowski (eventhorizon)
- Samuel ROZE (sroze)
- Tim Nagel (merk) - Tim Nagel (merk)
- Amrouche Hamza (simperfit)
- Brice BERNARD (brikou) - Brice BERNARD (brikou)
- Baptiste Clavié (talus) - Baptiste Clavié (talus)
- Vladimir Reznichenko (kalessil) - Vladimir Reznichenko (kalessil)
@ -126,6 +128,7 @@ Symfony is the result of the work of many people who made the code better
- Sebastiaan Stok (sstok) - Sebastiaan Stok (sstok)
- Stefano Sala (stefano.sala) - Stefano Sala (stefano.sala)
- Evgeniy (ewgraf) - Evgeniy (ewgraf)
- Grégoire Paris (greg0ire)
- Vincent AUBERT (vincent) - Vincent AUBERT (vincent)
- Juti Noppornpitak (shiroyuki) - Juti Noppornpitak (shiroyuki)
- Tigran Azatyan (tigranazatyan) - Tigran Azatyan (tigranazatyan)
@ -135,7 +138,6 @@ Symfony is the result of the work of many people who made the code better
- Guilherme Blanco (guilhermeblanco) - Guilherme Blanco (guilhermeblanco)
- Pablo Godel (pgodel) - Pablo Godel (pgodel)
- Jérémie Augustin (jaugustin) - Jérémie Augustin (jaugustin)
- Grégoire Paris (greg0ire)
- Andréia Bohner (andreia) - Andréia Bohner (andreia)
- Rafael Dohms (rdohms) - Rafael Dohms (rdohms)
- Arnaud Kleinpeter (nanocom) - Arnaud Kleinpeter (nanocom)
@ -149,6 +151,7 @@ Symfony is the result of the work of many people who made the code better
- Vyacheslav Pavlov - Vyacheslav Pavlov
- Richard van Laak (rvanlaak) - Richard van Laak (rvanlaak)
- Javier Spagnoletti (phansys) - Javier Spagnoletti (phansys)
- Julien Falque (julienfalque)
- Richard Shank (iampersistent) - Richard Shank (iampersistent)
- Thomas Rabaix (rande) - Thomas Rabaix (rande)
- Rouven Weßling (realityking) - Rouven Weßling (realityking)
@ -160,7 +163,6 @@ Symfony is the result of the work of many people who made the code better
- Matthieu Ouellette-Vachon (maoueh) - Matthieu Ouellette-Vachon (maoueh)
- Michał Pipa (michal.pipa) - Michał Pipa (michal.pipa)
- Dawid Nowak - Dawid Nowak
- Julien Falque (julienfalque)
- Amal Raghav (kertz) - Amal Raghav (kertz)
- Jonathan Ingram (jonathaningram) - Jonathan Ingram (jonathaningram)
- Artur Kotyrba - Artur Kotyrba
@ -171,8 +173,6 @@ Symfony is the result of the work of many people who made the code better
- Warnar Boekkooi (boekkooi) - Warnar Boekkooi (boekkooi)
- Dmitrii Chekaliuk (lazyhammer) - Dmitrii Chekaliuk (lazyhammer)
- Clément JOBEILI (dator) - Clément JOBEILI (dator)
- Amrouche Hamza
- Samuel ROZE (sroze)
- Daniel Espendiller - Daniel Espendiller
- Possum - Possum
- Dorian Villet (gnutix) - Dorian Villet (gnutix)
@ -190,6 +190,7 @@ Symfony is the result of the work of many people who made the code better
- Stepan Anchugov (kix) - Stepan Anchugov (kix)
- bronze1man - bronze1man
- sun (sun) - sun (sun)
- Valentin Udaltsov (vudaltsov)
- Larry Garfield (crell) - Larry Garfield (crell)
- Martin Schuhfuß (usefulthink) - Martin Schuhfuß (usefulthink)
- apetitpa - apetitpa
@ -248,7 +249,6 @@ Symfony is the result of the work of many people who made the code better
- Pierre-Yves LEBECQ (pylebecq) - Pierre-Yves LEBECQ (pylebecq)
- Jordan Samouh (jordansamouh) - Jordan Samouh (jordansamouh)
- Jakub Kucharovic (jkucharovic) - Jakub Kucharovic (jkucharovic)
- Valentin Udaltsov (vudaltsov)
- Uwe Jäger (uwej711) - Uwe Jäger (uwej711)
- Eugene Leonovich (rybakit) - Eugene Leonovich (rybakit)
- Filippo Tessarotto - Filippo Tessarotto
@ -261,6 +261,7 @@ Symfony is the result of the work of many people who made the code better
- Nikolay Labinskiy (e-moe) - Nikolay Labinskiy (e-moe)
- Leo Feyer - Leo Feyer
- Chekote - Chekote
- gadelat (gadelat)
- Thomas Adam - Thomas Adam
- Albert Casademont (acasademont) - Albert Casademont (acasademont)
- Jhonny Lidfors (jhonne) - Jhonny Lidfors (jhonne)
@ -299,8 +300,8 @@ Symfony is the result of the work of many people who made the code better
- Thomas Tourlourat (armetiz) - Thomas Tourlourat (armetiz)
- Andrey Esaulov (andremaha) - Andrey Esaulov (andremaha)
- Grégoire Passault (gregwar) - Grégoire Passault (gregwar)
- Jerzy Zawadzki (jzawadzki)
- Ismael Ambrosi (iambrosi) - Ismael Ambrosi (iambrosi)
- gadelat (gadelat)
- Baptiste Lafontaine - Baptiste Lafontaine
- Aurelijus Valeiša (aurelijus) - Aurelijus Valeiša (aurelijus)
- Victor Bocharsky (bocharsky_bw) - Victor Bocharsky (bocharsky_bw)
@ -345,6 +346,7 @@ Symfony is the result of the work of many people who made the code better
- Yaroslav Kiliba - Yaroslav Kiliba
- Terje Bråten - Terje Bråten
- Robbert Klarenbeek (robbertkl) - Robbert Klarenbeek (robbertkl)
- Edi Modrić (emodric)
- Thomas Calvet (fancyweb) - Thomas Calvet (fancyweb)
- Niels Keurentjes (curry684) - Niels Keurentjes (curry684)
- JhonnyL - JhonnyL
@ -364,7 +366,6 @@ Symfony is the result of the work of many people who made the code better
- Loïc Chardonnet (gnusat) - Loïc Chardonnet (gnusat)
- Marek Kalnik (marekkalnik) - Marek Kalnik (marekkalnik)
- Vyacheslav Salakhutdinov (megazoll) - Vyacheslav Salakhutdinov (megazoll)
- Jerzy Zawadzki (jzawadzki)
- Hassan Amouhzi - Hassan Amouhzi
- Tamas Szijarto - Tamas Szijarto
- Pavel Volokitin (pvolok) - Pavel Volokitin (pvolok)
@ -375,6 +376,7 @@ Symfony is the result of the work of many people who made the code better
- Tobias Naumann (tna) - Tobias Naumann (tna)
- Daniel Beyer - Daniel Beyer
- Shein Alexey - Shein Alexey
- Alex Rock Ancelet (pierstoval)
- Romain Gautier (mykiwi) - Romain Gautier (mykiwi)
- Joe Lencioni - Joe Lencioni
- Daniel Tschinder - Daniel Tschinder
@ -434,7 +436,6 @@ Symfony is the result of the work of many people who made the code better
- cedric lombardot (cedriclombardot) - cedric lombardot (cedriclombardot)
- Jonas Flodén (flojon) - Jonas Flodén (flojon)
- Thomas Perez (scullwm) - Thomas Perez (scullwm)
- Edi Modrić (emodric)
- Marcin Sikoń (marphi) - Marcin Sikoń (marphi)
- Dominik Zogg (dominik.zogg) - Dominik Zogg (dominik.zogg)
- Marek Pietrzak - Marek Pietrzak
@ -446,6 +447,7 @@ Symfony is the result of the work of many people who made the code better
- Rob Bast - Rob Bast
- Zander Baldwin - Zander Baldwin
- Adam Harvey - Adam Harvey
- Anton Bakai
- Maxime Veber (nek-) - Maxime Veber (nek-)
- Alex Bakhturin - Alex Bakhturin
- Yanick Witschi (toflar) - Yanick Witschi (toflar)
@ -495,7 +497,6 @@ Symfony is the result of the work of many people who made the code better
- Arjen van der Meijden - Arjen van der Meijden
- Michele Locati - Michele Locati
- Dariusz Ruminski - Dariusz Ruminski
- Alex Rock Ancelet (pierstoval)
- Erik Trapman (eriktrapman) - Erik Trapman (eriktrapman)
- De Cock Xavier (xdecock) - De Cock Xavier (xdecock)
- Almog Baku (almogbaku) - Almog Baku (almogbaku)
@ -619,7 +620,6 @@ Symfony is the result of the work of many people who made the code better
- Catalin Dan - Catalin Dan
- Stephan Vock - Stephan Vock
- Benjamin Zikarsky (bzikarsky) - Benjamin Zikarsky (bzikarsky)
- Anton Bakai
- Simon Schick (simonsimcity) - Simon Schick (simonsimcity)
- redstar504 - redstar504
- Tristan Roussel - Tristan Roussel
@ -711,8 +711,10 @@ Symfony is the result of the work of many people who made the code better
- Nikita Nefedov (nikita2206) - Nikita Nefedov (nikita2206)
- cgonzalez - cgonzalez
- Ben - Ben
- Mathieu Lechat
- Vincent Composieux (eko) - Vincent Composieux (eko)
- Jayson Xu (superjavason) - Jayson Xu (superjavason)
- Christopher Hertel (chertel)
- Hubert Lenoir (hubert_lenoir) - Hubert Lenoir (hubert_lenoir)
- Jaik Dean (jaikdean) - Jaik Dean (jaikdean)
- fago - fago
@ -733,6 +735,7 @@ Symfony is the result of the work of many people who made the code better
- Pierre Vanliefland (pvanliefland) - Pierre Vanliefland (pvanliefland)
- Sofiane HADDAG (sofhad) - Sofiane HADDAG (sofhad)
- frost-nzcr4 - frost-nzcr4
- Bozhidar Hristov
- Abhoryo - Abhoryo
- Fabian Vogler (fabian) - Fabian Vogler (fabian)
- Korvin Szanto - Korvin Szanto
@ -763,6 +766,7 @@ Symfony is the result of the work of many people who made the code better
- Fabien LUCAS (flucas2) - Fabien LUCAS (flucas2)
- Jörn Lang (j.lang) - Jörn Lang (j.lang)
- Omar Yepez (oyepez003) - Omar Yepez (oyepez003)
- Gawain Lynch (gawain)
- mwsaz - mwsaz
- Jelle Kapitein - Jelle Kapitein
- Benoît Bourgeois - Benoît Bourgeois
@ -925,6 +929,7 @@ Symfony is the result of the work of many people who made the code better
- Christian - Christian
- Denis Golubovskiy (bukashk0zzz) - Denis Golubovskiy (bukashk0zzz)
- Sergii Smertin (nfx) - Sergii Smertin (nfx)
- Michał Strzelecki
- hugofonseca (fonsecas72) - hugofonseca (fonsecas72)
- Martynas Narbutas - Martynas Narbutas
- Bailey Parker - Bailey Parker
@ -1002,6 +1007,7 @@ Symfony is the result of the work of many people who made the code better
- Brooks Boyd - Brooks Boyd
- Roger Webb - Roger Webb
- Dmitriy Simushev - Dmitriy Simushev
- pkowalczyk
- Max Voloshin (maxvoloshin) - Max Voloshin (maxvoloshin)
- Nicolas Fabre (nfabre) - Nicolas Fabre (nfabre)
- Raul Rodriguez (raul782) - Raul Rodriguez (raul782)
@ -1127,6 +1133,7 @@ Symfony is the result of the work of many people who made the code better
- Max Summe - Max Summe
- WedgeSama - WedgeSama
- Felds Liscia - Felds Liscia
- Chihiro Adachi (chihiro-adachi)
- Sullivan SENECHAL - Sullivan SENECHAL
- Tadcka - Tadcka
- Beth Binkovitz - Beth Binkovitz
@ -1283,6 +1290,7 @@ Symfony is the result of the work of many people who made the code better
- nuncanada - nuncanada
- flack - flack
- František Bereň - František Bereň
- Jeremiah VALERIE
- Mike Francis - Mike Francis
- Christoph Nissle (derstoffel) - Christoph Nissle (derstoffel)
- Ionel Scutelnicu (ionelscutelnicu) - Ionel Scutelnicu (ionelscutelnicu)
@ -1305,6 +1313,7 @@ Symfony is the result of the work of many people who made the code better
- Andrew Zhilin (zhil) - Andrew Zhilin (zhil)
- Oleksii Zhurbytskyi - Oleksii Zhurbytskyi
- Andy Stanberry - Andy Stanberry
- Felix Marezki
- Luiz “Felds” Liscia - Luiz “Felds” Liscia
- Thomas Rothe - Thomas Rothe
- nietonfir - nietonfir
@ -1352,7 +1361,6 @@ Symfony is the result of the work of many people who made the code better
- Nicole Cordes - Nicole Cordes
- Martin Kirilov - Martin Kirilov
- Bram Van der Sype (brammm) - Bram Van der Sype (brammm)
- Christopher Hertel (chertel)
- Guile (guile) - Guile (guile)
- Julien Moulin (lizjulien) - Julien Moulin (lizjulien)
- Mauro Foti (skler) - Mauro Foti (skler)
@ -1386,7 +1394,6 @@ Symfony is the result of the work of many people who made the code better
- Bertalan Attila - Bertalan Attila
- Yannick Bensacq (cibou) - Yannick Bensacq (cibou)
- Freek Van der Herten (freekmurze) - Freek Van der Herten (freekmurze)
- Gawain Lynch (gawain)
- Luca Genuzio (genuzio) - Luca Genuzio (genuzio)
- Hans Nilsson (hansnilsson) - Hans Nilsson (hansnilsson)
- Andrew Marcinkevičius (ifdattic) - Andrew Marcinkevičius (ifdattic)
@ -1444,6 +1451,7 @@ Symfony is the result of the work of many people who made the code better
- David Windell - David Windell
- Gabriel Birke - Gabriel Birke
- skafandri - skafandri
- Derek Bonner
- Alan Chen - Alan Chen
- Maerlyn - Maerlyn
- Even André Fiskvik - Even André Fiskvik
@ -1487,6 +1495,7 @@ Symfony is the result of the work of many people who made the code better
- Ian Jenkins (jenkoian) - Ian Jenkins (jenkoian)
- Jorge Martin (jorgemartind) - Jorge Martin (jorgemartind)
- Joeri Verdeyen (jverdeyen) - Joeri Verdeyen (jverdeyen)
- Dmitrii Poddubnyi (karser)
- Kevin Verschaeve (keversc) - Kevin Verschaeve (keversc)
- Kevin Herrera (kherge) - Kevin Herrera (kherge)
- Luis Ramón López López (lrlopez) - Luis Ramón López López (lrlopez)
@ -1500,6 +1509,7 @@ Symfony is the result of the work of many people who made the code better
- Jimmy Leger (redpanda) - Jimmy Leger (redpanda)
- Marcin Szepczynski (szepczynski) - Marcin Szepczynski (szepczynski)
- Cyrille Jouineau (tuxosaurus) - Cyrille Jouineau (tuxosaurus)
- Vladimir Chernyshev (volch)
- Yorkie Chadwick (yorkie76) - Yorkie Chadwick (yorkie76)
- GuillaumeVerdon - GuillaumeVerdon
- Ondrej Mirtes - Ondrej Mirtes
@ -1582,9 +1592,11 @@ Symfony is the result of the work of many people who made the code better
- Michael Schneider - Michael Schneider
- Cédric Bertolini - Cédric Bertolini
- n-aleha - n-aleha
- Anatol Belski
- Şəhriyar İmanov - Şəhriyar İmanov
- Kaipi Yann - Kaipi Yann
- Sam Williams - Sam Williams
- Guillaume Aveline
- Adrian Philipp - Adrian Philipp
- James Michael DuPont - James Michael DuPont
- Kasperki - Kasperki
@ -1744,6 +1756,7 @@ Symfony is the result of the work of many people who made the code better
- Schuyler Jager (sjager) - Schuyler Jager (sjager)
- Pascal Luna (skalpa) - Pascal Luna (skalpa)
- Volker (skydiablo) - Volker (skydiablo)
- Serkan Yildiz (srknyldz)
- Julien Sanchez (sumbobyboys) - Julien Sanchez (sumbobyboys)
- Guillermo Gisinger (t3chn0r) - Guillermo Gisinger (t3chn0r)
- Markus Tacker (tacker) - Markus Tacker (tacker)

View File

@ -51,7 +51,7 @@ install:
- copy /Y .composer\* %APPDATA%\Composer\ - copy /Y .composer\* %APPDATA%\Composer\
- php .github/build-packages.php "HEAD^" src\Symfony\Bridge\PhpUnit - php .github/build-packages.php "HEAD^" src\Symfony\Bridge\PhpUnit
- IF %APPVEYOR_REPO_BRANCH%==master (SET COMPOSER_ROOT_VERSION=dev-master) ELSE (SET COMPOSER_ROOT_VERSION=%APPVEYOR_REPO_BRANCH%.x-dev) - IF %APPVEYOR_REPO_BRANCH%==master (SET COMPOSER_ROOT_VERSION=dev-master) ELSE (SET COMPOSER_ROOT_VERSION=%APPVEYOR_REPO_BRANCH%.x-dev)
- php composer.phar update --no-progress --no-suggest --ansi - php -dmemory_limit=-1 composer.phar update --no-progress --no-suggest --ansi
- php phpunit install - php phpunit install
test_script: test_script:

View File

@ -112,7 +112,7 @@ class RegisterEventListenersAndSubscribersPass implements CompilerPassInterface
} }
$instance['event'] = array($instance['event']); $instance['event'] = array($instance['event']);
if ($lazy = !empty($instance['lazy'])) { if (!empty($instance['lazy'])) {
$this->container->getDefinition($id)->setPublic(true); $this->container->getDefinition($id)->setPublic(true);
} }
} }

View File

@ -263,6 +263,7 @@ class Table
* Renders table to output. * Renders table to output.
* *
* Example: * Example:
* <code>
* +---------------+-----------------------+------------------+ * +---------------+-----------------------+------------------+
* | ISBN | Title | Author | * | ISBN | Title | Author |
* +---------------+-----------------------+------------------+ * +---------------+-----------------------+------------------+
@ -270,6 +271,7 @@ class Table
* | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | * | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |
* | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien | * | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien |
* +---------------+-----------------------+------------------+ * +---------------+-----------------------+------------------+
* </code>
*/ */
public function render() public function render()
{ {
@ -303,7 +305,7 @@ class Table
/** /**
* Renders horizontal header separator. * Renders horizontal header separator.
* *
* Example: +-----+-----------+-------+ * Example: <code>+-----+-----------+-------+</code>
*/ */
private function renderRowSeparator() private function renderRowSeparator()
{ {
@ -334,7 +336,7 @@ class Table
/** /**
* Renders table row. * Renders table row.
* *
* Example: | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | * Example: <code>| 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens |</code>
* *
* @param array $row * @param array $row
* @param string $cellFormat * @param string $cellFormat

View File

@ -31,11 +31,6 @@ class TokenStream
*/ */
private $tokens = array(); private $tokens = array();
/**
* @var bool
*/
private $frozen = false;
/** /**
* @var Token[] * @var Token[]
*/ */
@ -49,7 +44,7 @@ class TokenStream
/** /**
* @var Token|null * @var Token|null
*/ */
private $peeked = null; private $peeked;
/** /**
* @var bool * @var bool
@ -75,8 +70,6 @@ class TokenStream
*/ */
public function freeze() public function freeze()
{ {
$this->frozen = true;
return $this; return $this;
} }

View File

@ -33,7 +33,6 @@ class AnalyzeServiceReferencesPass extends AbstractRecursivePass implements Repe
{ {
private $graph; private $graph;
private $currentDefinition; private $currentDefinition;
private $repeatedPass;
private $onlyConstructorArguments; private $onlyConstructorArguments;
private $lazy; private $lazy;
private $expressionLanguage; private $expressionLanguage;
@ -51,7 +50,7 @@ class AnalyzeServiceReferencesPass extends AbstractRecursivePass implements Repe
*/ */
public function setRepeatedPass(RepeatedPass $repeatedPass) public function setRepeatedPass(RepeatedPass $repeatedPass)
{ {
$this->repeatedPass = $repeatedPass; // no-op for BC
} }
/** /**

View File

@ -23,7 +23,6 @@ use Symfony\Component\DependencyInjection\Reference;
*/ */
class InlineServiceDefinitionsPass extends AbstractRecursivePass implements RepeatablePassInterface class InlineServiceDefinitionsPass extends AbstractRecursivePass implements RepeatablePassInterface
{ {
private $repeatedPass;
private $cloningIds = array(); private $cloningIds = array();
private $inlinedServiceIds = array(); private $inlinedServiceIds = array();
@ -32,7 +31,7 @@ class InlineServiceDefinitionsPass extends AbstractRecursivePass implements Repe
*/ */
public function setRepeatedPass(RepeatedPass $repeatedPass) public function setRepeatedPass(RepeatedPass $repeatedPass)
{ {
$this->repeatedPass = $repeatedPass; // no-op for BC
} }
/** /**

View File

@ -1036,8 +1036,19 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
{ {
$id = $this->normalizeId($id); $id = $this->normalizeId($id);
$seen = array();
while (isset($this->aliasDefinitions[$id])) { while (isset($this->aliasDefinitions[$id])) {
$id = (string) $this->aliasDefinitions[$id]; $id = (string) $this->aliasDefinitions[$id];
if (isset($seen[$id])) {
$seen = array_values($seen);
$seen = array_slice($seen, array_search($id, $seen));
$seen[] = $id;
throw new ServiceCircularReferenceException($id, $seen);
}
$seen[$id] = $id;
} }
return $this->getDefinition($id); return $this->getDefinition($id);

View File

@ -1123,6 +1123,23 @@ class ContainerBuilderTest extends TestCase
$this->assertNotSame($bar->foo, $barUser->foo); $this->assertNotSame($bar->foo, $barUser->foo);
} }
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
* @expectedExceptionMessage Circular reference detected for service "app.test_class", path: "app.test_class -> App\TestClass -> app.test_class".
*/
public function testThrowsCircularExceptionForCircularAliases()
{
$builder = new ContainerBuilder();
$builder->setAliases(array(
'foo' => new Alias('app.test_class'),
'app.test_class' => new Alias('App\\TestClass'),
'App\\TestClass' => new Alias('app.test_class'),
));
$builder->findDefinition('foo');
}
public function testInitializePropertiesBeforeMethodCalls() public function testInitializePropertiesBeforeMethodCalls()
{ {
$container = new ContainerBuilder(); $container = new ContainerBuilder();

View File

@ -112,7 +112,7 @@ final class Dotenv
$this->end = strlen($this->data); $this->end = strlen($this->data);
$this->state = self::STATE_VARNAME; $this->state = self::STATE_VARNAME;
$this->values = array(); $this->values = array();
$name = $value = ''; $name = '';
$this->skipEmptyLines(); $this->skipEmptyLines();

View File

@ -78,7 +78,7 @@ class ContainerAwareEventDispatcher extends EventDispatcher
$this->lazyLoad($eventName); $this->lazyLoad($eventName);
if (isset($this->listenerIds[$eventName])) { if (isset($this->listenerIds[$eventName])) {
foreach ($this->listenerIds[$eventName] as $i => list($serviceId, $method, $priority)) { foreach ($this->listenerIds[$eventName] as $i => list($serviceId, $method)) {
$key = $serviceId.'.'.$method; $key = $serviceId.'.'.$method;
if (isset($this->listeners[$eventName][$key]) && $listener === array($this->listeners[$eventName][$key], $method)) { if (isset($this->listeners[$eventName][$key]) && $listener === array($this->listeners[$eventName][$key], $method)) {
unset($this->listeners[$eventName][$key]); unset($this->listeners[$eventName][$key]);

View File

@ -146,6 +146,16 @@ class ExpressionLanguageTest extends TestCase
$this->assertSame($expected, $result); $this->assertSame($expected, $result);
} }
/**
* @expectedException \Symfony\Component\ExpressionLanguage\SyntaxError
* @expectedExceptionMessage Unexpected end of expression around position 6 for expression `node.`.
*/
public function testParseThrowsInsteadOfNotice()
{
$expressionLanguage = new ExpressionLanguage();
$expressionLanguage->parse('node.', array('node'));
}
public function shortCircuitProviderEvaluate() public function shortCircuitProviderEvaluate()
{ {
$object = $this->getMockBuilder('stdClass')->setMethods(array('foo'))->getMock(); $object = $this->getMockBuilder('stdClass')->setMethods(array('foo'))->getMock();

View File

@ -50,12 +50,12 @@ class TokenStream
*/ */
public function next() public function next()
{ {
++$this->position;
if (!isset($this->tokens[$this->position])) { if (!isset($this->tokens[$this->position])) {
throw new SyntaxError('Unexpected end of expression', $this->current->cursor, $this->expression); throw new SyntaxError('Unexpected end of expression', $this->current->cursor, $this->expression);
} }
++$this->position;
$this->current = $this->tokens[$this->position]; $this->current = $this->tokens[$this->position];
} }

View File

@ -23,7 +23,6 @@ use Symfony\Component\Form\Exception\UnexpectedTypeException;
class DateIntervalToStringTransformer implements DataTransformerInterface class DateIntervalToStringTransformer implements DataTransformerInterface
{ {
private $format; private $format;
private $parseSigned;
/** /**
* Transforms a \DateInterval instance to a string. * Transforms a \DateInterval instance to a string.
@ -31,12 +30,10 @@ class DateIntervalToStringTransformer implements DataTransformerInterface
* @see \DateInterval::format() for supported formats * @see \DateInterval::format() for supported formats
* *
* @param string $format The date format * @param string $format The date format
* @param bool $parseSigned Whether to parse as a signed interval
*/ */
public function __construct($format = 'P%yY%mM%dDT%hH%iM%sS', $parseSigned = false) public function __construct($format = 'P%yY%mM%dDT%hH%iM%sS')
{ {
$this->format = $format; $this->format = $format;
$this->parseSigned = $parseSigned;
} }
/** /**

View File

@ -50,7 +50,7 @@ class RemoveEmptyControllerArgumentLocatorsPass implements CompilerPassInterface
$action = substr(strrchr($controller, ':'), 1); $action = substr(strrchr($controller, ':'), 1);
$id = substr($controller, 0, -1 - strlen($action)); $id = substr($controller, 0, -1 - strlen($action));
$controllerDef = $container->getDefinition($id); $controllerDef = $container->getDefinition($id);
foreach ($controllerDef->getMethodCalls() as list($method, $args)) { foreach ($controllerDef->getMethodCalls() as list($method)) {
if (0 === strcasecmp($action, $method)) { if (0 === strcasecmp($action, $method)) {
$reason = sprintf('Removing method "%s" of service "%s" from controller candidates: the method is called at instantiation, thus cannot be an action.', $action, $id); $reason = sprintf('Removing method "%s" of service "%s" from controller candidates: the method is called at instantiation, thus cannot be an action.', $action, $id);
break; break;

View File

@ -151,7 +151,7 @@ class Store implements StoreInterface
return; return;
} }
list($req, $headers) = $match; $headers = $match[1];
if (file_exists($body = $this->getPath($headers['x-content-digest'][0]))) { if (file_exists($body = $this->getPath($headers['x-content-digest'][0]))) {
return $this->restoreResponse($headers, $body); return $this->restoreResponse($headers, $body);
} }

View File

@ -150,7 +150,7 @@ class HttpKernel implements HttpKernelInterface, TerminableInterface
$arguments = $event->getArguments(); $arguments = $event->getArguments();
// call controller // call controller
$response = call_user_func_array($controller, $arguments); $response = \call_user_func_array($controller, $arguments);
// view // view
if (!$response instanceof Response) { if (!$response instanceof Response) {

View File

@ -119,7 +119,7 @@ abstract class AbstractPipes implements PipesInterface
$w = array($this->pipes[0]); $w = array($this->pipes[0]);
// let's have a look if something changed in streams // let's have a look if something changed in streams
if (false === $n = @stream_select($r, $w, $e, 0, 0)) { if (false === @stream_select($r, $w, $e, 0, 0)) {
return; return;
} }

View File

@ -99,7 +99,7 @@ class UnixPipes extends AbstractPipes
unset($r[0]); unset($r[0]);
// let's have a look if something changed in streams // let's have a look if something changed in streams
if (($r || $w) && false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) { if (($r || $w) && false === @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
// if a system call has been interrupted, forget about it, let's try again // if a system call has been interrupted, forget about it, let's try again
// otherwise, an error occurred, let's reset pipes // otherwise, an error occurred, let's reset pipes
if (!$this->hasSystemCallBeenInterrupted()) { if (!$this->hasSystemCallBeenInterrupted()) {

View File

@ -24,7 +24,6 @@ class JsonDecode implements DecoderInterface
private $associative; private $associative;
private $recursionDepth; private $recursionDepth;
private $lastError = JSON_ERROR_NONE;
/** /**
* Constructs a new JsonDecode instance. * Constructs a new JsonDecode instance.
@ -75,7 +74,7 @@ class JsonDecode implements DecoderInterface
$decodedData = json_decode($data, $associative, $recursionDepth, $options); $decodedData = json_decode($data, $associative, $recursionDepth, $options);
if (JSON_ERROR_NONE !== $this->lastError = json_last_error()) { if (JSON_ERROR_NONE !== json_last_error()) {
throw new NotEncodableValueException(json_last_error_msg()); throw new NotEncodableValueException(json_last_error_msg());
} }

View File

@ -21,7 +21,6 @@ use Symfony\Component\Serializer\Exception\NotEncodableValueException;
class JsonEncode implements EncoderInterface class JsonEncode implements EncoderInterface
{ {
private $options; private $options;
private $lastError = JSON_ERROR_NONE;
public function __construct($bitmask = 0) public function __construct($bitmask = 0)
{ {
@ -39,7 +38,7 @@ class JsonEncode implements EncoderInterface
$encodedJson = json_encode($data, $context['json_encode_options']); $encodedJson = json_encode($data, $context['json_encode_options']);
if (JSON_ERROR_NONE !== $this->lastError = json_last_error()) { if (JSON_ERROR_NONE !== json_last_error()) {
throw new NotEncodableValueException(json_last_error_msg()); throw new NotEncodableValueException(json_last_error_msg());
} }

View File

@ -399,6 +399,8 @@ abstract class AbstractNormalizer extends SerializerAwareNormalizer implements N
{ {
if (isset($parentContext[self::ATTRIBUTES][$attribute])) { if (isset($parentContext[self::ATTRIBUTES][$attribute])) {
$parentContext[self::ATTRIBUTES] = $parentContext[self::ATTRIBUTES][$attribute]; $parentContext[self::ATTRIBUTES] = $parentContext[self::ATTRIBUTES][$attribute];
} else {
unset($parentContext[self::ATTRIBUTES]);
} }
return $parentContext; return $parentContext;

View File

@ -683,6 +683,16 @@ class ObjectNormalizerTest extends TestCase
), ),
$serializer->normalize($objectDummy, null, $context) $serializer->normalize($objectDummy, null, $context)
); );
$context = array('attributes' => array('foo', 'baz', 'object'));
$this->assertEquals(
array(
'foo' => 'foo',
'baz' => true,
'object' => array('foo' => 'innerFoo', 'bar' => 'innerBar'),
),
$serializer->normalize($objectDummy, null, $context)
);
} }
public function testAttributesContextDenormalize() public function testAttributesContextDenormalize()

View File

@ -227,7 +227,6 @@ class ConstraintViolationAssertion
private $parameters = array(); private $parameters = array();
private $invalidValue = 'InvalidValue'; private $invalidValue = 'InvalidValue';
private $propertyPath = 'property.path'; private $propertyPath = 'property.path';
private $translationDomain;
private $plural; private $plural;
private $code; private $code;
private $constraint; private $constraint;
@ -264,7 +263,7 @@ class ConstraintViolationAssertion
public function setTranslationDomain($translationDomain) public function setTranslationDomain($translationDomain)
{ {
$this->translationDomain = $translationDomain; // no-op for BC
return $this; return $this;
} }

View File

@ -573,7 +573,27 @@ class Parser
} }
if (null === $indentation) { if (null === $indentation) {
$newIndent = null;
$movements = 0;
do {
$EOF = false;
// comment-like lines do not influence the indentation depth
if ($this->isCurrentLineComment()) {
$EOF = !$this->moveToNextLine();
if (!$EOF) {
++$movements;
}
} else {
$newIndent = $this->getCurrentLineIndentation(); $newIndent = $this->getCurrentLineIndentation();
}
} while (!$EOF && null === $newIndent);
for ($i = 0; $i < $movements; ++$i) {
$this->moveToPreviousLine();
}
$unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem(); $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem();
@ -587,6 +607,8 @@ class Parser
$data = array(); $data = array();
if ($this->getCurrentLineIndentation() >= $newIndent) { if ($this->getCurrentLineIndentation() >= $newIndent) {
$data[] = substr($this->currentLine, $newIndent); $data[] = substr($this->currentLine, $newIndent);
} elseif ($this->isCurrentLineComment()) {
$data[] = $this->currentLine;
} else { } else {
$this->moveToPreviousLine(); $this->moveToPreviousLine();
@ -905,11 +927,15 @@ class Parser
private function isNextLineIndented() private function isNextLineIndented()
{ {
$currentIndentation = $this->getCurrentLineIndentation(); $currentIndentation = $this->getCurrentLineIndentation();
$movements = 0;
do {
$EOF = !$this->moveToNextLine(); $EOF = !$this->moveToNextLine();
while (!$EOF && $this->isCurrentLineEmpty()) { if (!$EOF) {
$EOF = !$this->moveToNextLine(); ++$movements;
} }
} while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()));
if ($EOF) { if ($EOF) {
return false; return false;
@ -917,7 +943,9 @@ class Parser
$ret = $this->getCurrentLineIndentation() > $currentIndentation; $ret = $this->getCurrentLineIndentation() > $currentIndentation;
for ($i = 0; $i < $movements; ++$i) {
$this->moveToPreviousLine(); $this->moveToPreviousLine();
}
return $ret; return $ret;
} }
@ -1006,19 +1034,25 @@ class Parser
private function isNextLineUnIndentedCollection() private function isNextLineUnIndentedCollection()
{ {
$currentIndentation = $this->getCurrentLineIndentation(); $currentIndentation = $this->getCurrentLineIndentation();
$notEOF = $this->moveToNextLine(); $movements = 0;
while ($notEOF && $this->isCurrentLineEmpty()) { do {
$notEOF = $this->moveToNextLine(); $EOF = !$this->moveToNextLine();
if (!$EOF) {
++$movements;
} }
} while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()));
if (false === $notEOF) { if ($EOF) {
return false; return false;
} }
$ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem(); $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem();
for ($i = 0; $i < $movements; ++$i) {
$this->moveToPreviousLine(); $this->moveToPreviousLine();
}
return $ret; return $ret;
} }

View File

@ -2090,6 +2090,68 @@ foo: { &foo { a: Steve, <<: *foo} }
EOE; EOE;
$this->parser->parse($yaml); $this->parser->parse($yaml);
} }
/**
* @dataProvider indentedMappingData
*/
public function testParseIndentedMappings($yaml, $expected)
{
$this->assertSame($expected, $this->parser->parse($yaml));
}
public function indentedMappingData()
{
$tests = array();
$yaml = <<<YAML
foo:
- bar: "foobar"
# A comment
baz: "foobaz"
YAML;
$expected = array(
'foo' => array(
array(
'bar' => 'foobar',
'baz' => 'foobaz',
),
),
);
$tests['comment line is first line in indented block'] = array($yaml, $expected);
$yaml = <<<YAML
foo:
- bar:
# comment
baz: [1, 2, 3]
YAML;
$expected = array(
'foo' => array(
array(
'bar' => array(
'baz' => array(1, 2, 3),
),
),
),
);
$tests['mapping value on new line starting with a comment line'] = array($yaml, $expected);
$yaml = <<<YAML
foo:
-
bar: foobar
YAML;
$expected = array(
'foo' => array(
array(
'bar' => 'foobar',
),
),
);
$tests['mapping in sequence starting on a new line'] = array($yaml, $expected);
return $tests;
}
} }
class B class B