Merge branch '2.8' into 3.2

* 2.8:
  fixed CS
  [2.8] Modify 2.8 upgrade doc - key option is deprecated.
  [DebugBundle] Reword an outdated comment about var dumper wiring
  [DI] Fix some docblocks
  Ignore memcached missing key error on dession destroy
  Github template: Remove EOM 3.2 from branch suggestion
  [Security] Fix security.interactive_login event const doc block
  Avoid infinite loops when profiler data is malformed
  [Bridge\ProxyManager] Dont call __destruct() on non-instantiated services
  Docblock improvement
  bumped Symfony version to 2.8.27
  updated VERSION for 2.8.26
  updated CHANGELOG for 2.8.26
  bumped Symfony version to 2.7.34
  updated VERSION for 2.7.33
  update CONTRIBUTORS for 2.7.33
  updated CHANGELOG for 2.7.33
  [HttpFoundation] Generate safe fallback filename for wrongly encoded filename
This commit is contained in:
Fabien Potencier 2017-08-10 09:06:25 +02:00
commit 3306986a5d
19 changed files with 211 additions and 33 deletions

View File

@ -1,6 +1,6 @@
| Q | A | Q | A
| ------------- | --- | ------------- | ---
| Branch? | 3.4 or master / 2.7, 2.8, 3.2 or 3.3 <!-- see comment below --> | Branch? | 3.4 or master / 2.7, 2.8 or 3.3 <!-- see comment below -->
| Bug fix? | yes/no | Bug fix? | yes/no
| New feature? | yes/no <!-- don't forget updating src/**/CHANGELOG.md files --> | New feature? | yes/no <!-- don't forget updating src/**/CHANGELOG.md files -->
| BC breaks? | yes/no | BC breaks? | yes/no

View File

@ -20,11 +20,11 @@ Symfony is the result of the work of many people who made the code better
- Javier Eguiluz (javier.eguiluz) - Javier Eguiluz (javier.eguiluz)
- Hugo Hamon (hhamon) - Hugo Hamon (hhamon)
- Maxime Steinhausser (ogizanagi) - Maxime Steinhausser (ogizanagi)
- Abdellatif Ait boudad (aitboudad)
- Robin Chalas (chalas_r) - Robin Chalas (chalas_r)
- Abdellatif Ait boudad (aitboudad)
- Grégoire Pineau (lyrixx)
- Romain Neutron (romain) - Romain Neutron (romain)
- Pascal Borreli (pborreli) - Pascal Borreli (pborreli)
- Grégoire Pineau (lyrixx)
- Wouter De Jong (wouterj) - Wouter De Jong (wouterj)
- Joseph Bielawski (stloyd) - Joseph Bielawski (stloyd)
- Karma Dordrak (drak) - Karma Dordrak (drak)
@ -34,8 +34,8 @@ Symfony is the result of the work of many people who made the code better
- Jean-François Simon (jfsimon) - Jean-François Simon (jfsimon)
- Benjamin Eberlei (beberlei) - Benjamin Eberlei (beberlei)
- Igor Wiedler (igorw) - Igor Wiedler (igorw)
- Eriksen Costa (eriksencosta)
- Roland Franssen (ro0) - Roland Franssen (ro0)
- Eriksen Costa (eriksencosta)
- Jules Pietri (heah) - Jules Pietri (heah)
- Sarah Khalil (saro0h) - Sarah Khalil (saro0h)
- Guilhem Niot (energetick) - Guilhem Niot (energetick)
@ -66,6 +66,7 @@ Symfony is the result of the work of many people who made the code better
- Eric Clemmons (ericclemmons) - Eric Clemmons (ericclemmons)
- Charles Sarrazin (csarrazi) - Charles Sarrazin (csarrazi)
- Christian Raue - Christian Raue
- Konstantin Myakshin (koc)
- Arnout Boks (aboks) - Arnout Boks (aboks)
- Deni - Deni
- Henrik Westphal (snc) - Henrik Westphal (snc)
@ -73,7 +74,7 @@ Symfony is the result of the work of many people who made the code better
- Jáchym Toušek (enumag) - Jáchym Toušek (enumag)
- Titouan Galopin (tgalopin) - Titouan Galopin (tgalopin)
- Douglas Greenshields (shieldo) - Douglas Greenshields (shieldo)
- Konstantin Myakshin (koc) - Dany Maillard (maidmaid)
- Lee McDermott - Lee McDermott
- Brandon Turner - Brandon Turner
- Luis Cordova (cordoval) - Luis Cordova (cordoval)
@ -89,23 +90,22 @@ Symfony is the result of the work of many people who made the code better
- Fran Moreno (franmomu) - Fran Moreno (franmomu)
- Antoine Hérault (herzult) - Antoine Hérault (herzult)
- Paráda József (paradajozsef) - Paráda József (paradajozsef)
- Issei Murasawa (issei_m)
- Arnaud Le Blanc (arnaud-lb) - Arnaud Le Blanc (arnaud-lb)
- Maxime STEINHAUSSER - Maxime STEINHAUSSER
- Alexander M. Turek (derrabus) - Alexander M. Turek (derrabus)
- Michal Piotrowski (eventhorizon) - Michal Piotrowski (eventhorizon)
- Dany Maillard (maidmaid)
- Issei Murasawa (issei_m)
- Tim Nagel (merk) - Tim Nagel (merk)
- Yonel Ceruto González (yonelceruto)
- Brice BERNARD (brikou) - Brice BERNARD (brikou)
- Baptiste Clavié (talus) - Baptiste Clavié (talus)
- Vladimir Reznichenko (kalessil) - Vladimir Reznichenko (kalessil)
- marc.weistroff - marc.weistroff
- Yonel Ceruto González (yonelceruto)
- lenar - lenar
- Tobias Nyholm (tobias)
- Włodzimierz Gajda (gajdaw) - Włodzimierz Gajda (gajdaw)
- Alexander Schwenn (xelaris) - Alexander Schwenn (xelaris)
- Jacob Dreesen (jdreesen) - Jacob Dreesen (jdreesen)
- Tobias Nyholm (tobias)
- Florian Voutzinos (florianv) - Florian Voutzinos (florianv)
- Colin Frei - Colin Frei
- Adrien Brault (adrienbrault) - Adrien Brault (adrienbrault)
@ -132,13 +132,13 @@ Symfony is the result of the work of many people who made the code better
- Daniel Gomes (danielcsgomes) - Daniel Gomes (danielcsgomes)
- Hidenori Goto (hidenorigoto) - Hidenori Goto (hidenorigoto)
- Guilherme Blanco (guilhermeblanco) - Guilherme Blanco (guilhermeblanco)
- David Maicher (dmaicher)
- Pablo Godel (pgodel) - Pablo Godel (pgodel)
- Jérémie Augustin (jaugustin) - Jérémie Augustin (jaugustin)
- Andréia Bohner (andreia) - Andréia Bohner (andreia)
- Rafael Dohms (rdohms) - Rafael Dohms (rdohms)
- Arnaud Kleinpeter (nanocom) - Arnaud Kleinpeter (nanocom)
- jwdeitch - jwdeitch
- David Maicher (dmaicher)
- Mikael Pajunen - Mikael Pajunen
- Joel Wurtz (brouznouf) - Joel Wurtz (brouznouf)
- Jérôme Vasseur (jvasseur) - Jérôme Vasseur (jvasseur)
@ -176,6 +176,7 @@ Symfony is the result of the work of many people who made the code better
- Benjamin Dulau (dbenjamin) - Benjamin Dulau (dbenjamin)
- James Halsall (jaitsu) - James Halsall (jaitsu)
- Mathieu Lemoine (lemoinem) - Mathieu Lemoine (lemoinem)
- Christian Schmidt
- Andreas Hucks (meandmymonkey) - Andreas Hucks (meandmymonkey)
- Noel Guilbert (noel) - Noel Guilbert (noel)
- Stepan Anchugov (kix) - Stepan Anchugov (kix)
@ -201,7 +202,6 @@ Symfony is the result of the work of many people who made the code better
- John Kary (johnkary) - John Kary (johnkary)
- Justin Hileman (bobthecow) - Justin Hileman (bobthecow)
- Blanchon Vincent (blanchonvincent) - Blanchon Vincent (blanchonvincent)
- Christian Schmidt
- Michele Orselli (orso) - Michele Orselli (orso)
- Tom Van Looy (tvlooy) - Tom Van Looy (tvlooy)
- Sven Paulus (subsven) - Sven Paulus (subsven)
@ -238,6 +238,7 @@ Symfony is the result of the work of many people who made the code better
- Katsuhiro OGAWA - Katsuhiro OGAWA
- Patrick McDougle (patrick-mcdougle) - Patrick McDougle (patrick-mcdougle)
- Alif Rachmawadi - Alif Rachmawadi
- Alessandro Chitolina
- Kristen Gilden (kgilden) - Kristen Gilden (kgilden)
- Pierre-Yves LEBECQ (pylebecq) - Pierre-Yves LEBECQ (pylebecq)
- Jordan Samouh (jordansamouh) - Jordan Samouh (jordansamouh)
@ -263,6 +264,8 @@ Symfony is the result of the work of many people who made the code better
- Pavel Batanov (scaytrase) - Pavel Batanov (scaytrase)
- Nikita Konstantinov - Nikita Konstantinov
- Wodor Wodorski - Wodor Wodorski
- Rob Frawley 2nd (robfrawley)
- Gregor Harlan (gharlan)
- Thomas Lallement (raziel057) - Thomas Lallement (raziel057)
- Giorgio Premi - Giorgio Premi
- Matthieu Napoli (mnapoli) - Matthieu Napoli (mnapoli)
@ -278,7 +281,6 @@ Symfony is the result of the work of many people who made the code better
- Marc Weistroff (futurecat) - Marc Weistroff (futurecat)
- Christian Schmidt - Christian Schmidt
- Hidde Wieringa (hiddewie) - Hidde Wieringa (hiddewie)
- Alessandro Chitolina
- Chad Sikorra (chadsikorra) - Chad Sikorra (chadsikorra)
- Chris Smith (cs278) - Chris Smith (cs278)
- Florian Klein (docteurklein) - Florian Klein (docteurklein)
@ -315,7 +317,6 @@ Symfony is the result of the work of many people who made the code better
- Thierry Thuon (lepiaf) - Thierry Thuon (lepiaf)
- Ricard Clau (ricardclau) - Ricard Clau (ricardclau)
- Mark Challoner (markchalloner) - Mark Challoner (markchalloner)
- Gregor Harlan (gharlan)
- Gennady Telegin (gtelegin) - Gennady Telegin (gtelegin)
- Ben Davies (bendavies) - Ben Davies (bendavies)
- Erin Millard - Erin Millard
@ -324,7 +325,6 @@ Symfony is the result of the work of many people who made the code better
- Magnus Nordlander (magnusnordlander) - Magnus Nordlander (magnusnordlander)
- alquerci - alquerci
- Francesco Levorato - Francesco Levorato
- Rob Frawley 2nd (robfrawley)
- Vitaliy Zakharov (zakharovvi) - Vitaliy Zakharov (zakharovvi)
- Tobias Sjösten (tobiassjosten) - Tobias Sjösten (tobiassjosten)
- Gyula Sallai (salla) - Gyula Sallai (salla)
@ -341,6 +341,7 @@ Symfony is the result of the work of many people who made the code better
- Thomas Calvet (fancyweb) - Thomas Calvet (fancyweb)
- Niels Keurentjes (curry684) - Niels Keurentjes (curry684)
- JhonnyL - JhonnyL
- David Badura (davidbadura)
- hossein zolfi (ocean) - hossein zolfi (ocean)
- Clément Gautier (clementgautier) - Clément Gautier (clementgautier)
- Eduardo Gulias (egulias) - Eduardo Gulias (egulias)
@ -430,7 +431,6 @@ Symfony is the result of the work of many people who made the code better
- Christian Wahler - Christian Wahler
- Gintautas Miselis - Gintautas Miselis
- Rob Bast - Rob Bast
- David Badura (davidbadura)
- Zander Baldwin - Zander Baldwin
- Adam Harvey - Adam Harvey
- Maxime Veber (nek-) - Maxime Veber (nek-)
@ -545,6 +545,7 @@ Symfony is the result of the work of many people who made the code better
- Max Rath (drak3) - Max Rath (drak3)
- Stéphane Escandell (sescandell) - Stéphane Escandell (sescandell)
- Konstantin S. M. Möllers (ksmmoellers) - Konstantin S. M. Möllers (ksmmoellers)
- James Johnston
- Sinan Eldem - Sinan Eldem
- Alexandre Dupuy (satchette) - Alexandre Dupuy (satchette)
- Andre Rømcke (andrerom) - Andre Rømcke (andrerom)
@ -593,6 +594,7 @@ Symfony is the result of the work of many people who made the code better
- Ulumuddin Yunus (joenoez) - Ulumuddin Yunus (joenoez)
- Luc Vieillescazes (iamluc) - Luc Vieillescazes (iamluc)
- Johann Saunier (prophet777) - Johann Saunier (prophet777)
- Valentin Udaltsov (vudaltsov)
- Michael Devery (mickadoo) - Michael Devery (mickadoo)
- Antoine Corcy - Antoine Corcy
- Artur Eshenbrener - Artur Eshenbrener
@ -911,6 +913,7 @@ Symfony is the result of the work of many people who made the code better
- Alex Demchenko (pilot) - Alex Demchenko (pilot)
- Tadas Gliaubicas (tadcka) - Tadas Gliaubicas (tadcka)
- Benoit Garret - Benoit Garret
- Jakub Sacha
- DerManoMann - DerManoMann
- Olaf Klischat - Olaf Klischat
- orlovv - orlovv
@ -1175,6 +1178,7 @@ Symfony is the result of the work of many people who made the code better
- Malte Wunsch - Malte Wunsch
- wusuopu - wusuopu
- povilas - povilas
- Gavin Staniforth
- Alessandro Tagliapietra (alex88) - Alessandro Tagliapietra (alex88)
- Biji (biji) - Biji (biji)
- Gunnar Lium (gunnarlium) - Gunnar Lium (gunnarlium)
@ -1236,6 +1240,7 @@ Symfony is the result of the work of many people who made the code better
- flack - flack
- izzyp - izzyp
- František Bereň - František Bereň
- Mike Francis
- Christoph Nissle (derstoffel) - Christoph Nissle (derstoffel)
- Ionel Scutelnicu (ionelscutelnicu) - Ionel Scutelnicu (ionelscutelnicu)
- Nicolas Tallefourtané (nicolab) - Nicolas Tallefourtané (nicolab)
@ -1246,6 +1251,7 @@ Symfony is the result of the work of many people who made the code better
- jjanvier - jjanvier
- Julius Beckmann - Julius Beckmann
- Romain Dorgueil - Romain Dorgueil
- Christopher Parotat
- Grayson Koonce (breerly) - Grayson Koonce (breerly)
- Fabien LUCAS (flucas2) - Fabien LUCAS (flucas2)
- Indra Gunawan (indragunawan) - Indra Gunawan (indragunawan)
@ -1537,11 +1543,13 @@ Symfony is the result of the work of many people who made the code better
- Ladislav Tánczos - Ladislav Tánczos
- Brian Freytag - Brian Freytag
- Skorney - Skorney
- fmarchalemisys
- mieszko4 - mieszko4
- Steve Preston - Steve Preston
- Neophy7e - Neophy7e
- bokonet - bokonet
- Arrilot - Arrilot
- Shaun Simmons
- Markus Staab - Markus Staab
- Pierre-Louis LAUNAY - Pierre-Louis LAUNAY
- djama - djama
@ -1570,6 +1578,7 @@ Symfony is the result of the work of many people who made the code better
- Penny Leach - Penny Leach
- Richard Trebichavský - Richard Trebichavský
- g123456789l - g123456789l
- Jonathan Vollebregt
- oscartv - oscartv
- DanSync - DanSync
- Peter Zwosta - Peter Zwosta
@ -1682,7 +1691,6 @@ Symfony is the result of the work of many people who made the code better
- Moritz Kraft (userfriendly) - Moritz Kraft (userfriendly)
- Víctor Mateo (victormateo) - Víctor Mateo (victormateo)
- Vincent (vincent1870) - Vincent (vincent1870)
- Valentin Udaltsov (vudaltsov)
- Eugene Babushkin (warl) - Eugene Babushkin (warl)
- Wouter Sioen (wouter_sioen) - Wouter Sioen (wouter_sioen)
- Xavier Amado (xamado) - Xavier Amado (xamado)
@ -1704,6 +1712,7 @@ Symfony is the result of the work of many people who made the code better
- Sergey Fedotov - Sergey Fedotov
- Michael - Michael
- fh-github@fholzhauer.de - fh-github@fholzhauer.de
- AbdElKader Bouadjadja
- Jan Emrich - Jan Emrich
- Mark Topper - Mark Topper
- Xavier REN - Xavier REN

View File

@ -0,0 +1,31 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bridge\ProxyManager\LazyProxy\Instantiator;
use ProxyManager\Factory\LazyLoadingValueHolderFactory as BaseFactory;
use Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\LazyLoadingValueHolderGenerator;
/**
* @internal
*/
class LazyLoadingValueHolderFactoryV1 extends BaseFactory
{
private $generatorV1;
/**
* {@inheritdoc}
*/
protected function getGenerator()
{
return $this->generatorV1 ?: $this->generatorV1 = new LazyLoadingValueHolderGenerator();
}
}

View File

@ -0,0 +1,32 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bridge\ProxyManager\LazyProxy\Instantiator;
use ProxyManager\ProxyGenerator\ProxyGeneratorInterface;
use ProxyManager\Factory\LazyLoadingValueHolderFactory as BaseFactory;
use Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper\LazyLoadingValueHolderGenerator;
/**
* @internal
*/
class LazyLoadingValueHolderFactoryV2 extends BaseFactory
{
private $generator;
/**
* {@inheritdoc}
*/
protected function getGenerator(): ProxyGeneratorInterface
{
return $this->generator ?: $this->generator = new LazyLoadingValueHolderGenerator();
}
}

View File

@ -36,7 +36,11 @@ class RuntimeInstantiator implements InstantiatorInterface
$config = new Configuration(); $config = new Configuration();
$config->setGeneratorStrategy(new EvaluatingGeneratorStrategy()); $config->setGeneratorStrategy(new EvaluatingGeneratorStrategy());
$this->factory = new LazyLoadingValueHolderFactory($config); if (method_exists('ProxyManager\Version', 'getVersion')) {
$this->factory = new LazyLoadingValueHolderFactoryV2($config);
} else {
$this->factory = new LazyLoadingValueHolderFactoryV1($config);
}
} }
/** /**

View File

@ -0,0 +1,41 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper;
use ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator as BaseGenerator;
use Zend\Code\Generator\ClassGenerator;
/**
* @internal
*/
class LazyLoadingValueHolderGenerator extends BaseGenerator
{
/**
* {@inheritdoc}
*/
public function generate(\ReflectionClass $originalClass, ClassGenerator $classGenerator)
{
parent::generate($originalClass, $classGenerator);
if ($classGenerator->hasMethod('__destruct')) {
$destructor = $classGenerator->getMethod('__destruct');
$body = $destructor->getBody();
$newBody = preg_replace('/^(\$this->initializer[a-zA-Z0-9]++) && .*;\n\nreturn (\$this->valueHolder)/', '$1 || $2', $body);
if ($body === $newBody) {
throw new \UnexpectedValueException(sprintf('Unexpected lazy-proxy format generated for method %s::__destruct()', $originalClass->name));
}
$destructor->setBody($newBody);
}
}
}

View File

@ -13,7 +13,6 @@ namespace Symfony\Bridge\ProxyManager\LazyProxy\PhpDumper;
use ProxyManager\Generator\ClassGenerator; use ProxyManager\Generator\ClassGenerator;
use ProxyManager\GeneratorStrategy\BaseGeneratorStrategy; use ProxyManager\GeneratorStrategy\BaseGeneratorStrategy;
use ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator;
use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\DumperInterface; use Symfony\Component\DependencyInjection\LazyProxy\PhpDumper\DumperInterface;

View File

@ -39,6 +39,9 @@ class ContainerBuilderTest extends TestCase
/* @var $foo1 \ProxyManager\Proxy\LazyLoadingInterface|\ProxyManager\Proxy\ValueHolderInterface */ /* @var $foo1 \ProxyManager\Proxy\LazyLoadingInterface|\ProxyManager\Proxy\ValueHolderInterface */
$foo1 = $builder->get('foo1'); $foo1 = $builder->get('foo1');
$foo1->__destruct();
$this->assertSame(0, $foo1::$destructorCount);
$this->assertSame($foo1, $builder->get('foo1'), 'The same proxy is retrieved on multiple subsequent calls'); $this->assertSame($foo1, $builder->get('foo1'), 'The same proxy is retrieved on multiple subsequent calls');
$this->assertInstanceOf('\ProxyManagerBridgeFooClass', $foo1); $this->assertInstanceOf('\ProxyManagerBridgeFooClass', $foo1);
$this->assertInstanceOf('\ProxyManager\Proxy\LazyLoadingInterface', $foo1); $this->assertInstanceOf('\ProxyManager\Proxy\LazyLoadingInterface', $foo1);
@ -50,5 +53,8 @@ class ContainerBuilderTest extends TestCase
$this->assertTrue($foo1->isProxyInitialized()); $this->assertTrue($foo1->isProxyInitialized());
$this->assertInstanceOf('\ProxyManagerBridgeFooClass', $foo1->getWrappedValueHolderValue()); $this->assertInstanceOf('\ProxyManagerBridgeFooClass', $foo1->getWrappedValueHolderValue());
$this->assertNotInstanceOf('\ProxyManager\Proxy\LazyLoadingInterface', $foo1->getWrappedValueHolderValue()); $this->assertNotInstanceOf('\ProxyManager\Proxy\LazyLoadingInterface', $foo1->getWrappedValueHolderValue());
$foo1->__destruct();
$this->assertSame(1, $foo1::$destructorCount);
} }
} }

View File

@ -2,6 +2,8 @@
class ProxyManagerBridgeFooClass class ProxyManagerBridgeFooClass
{ {
public static $destructorCount = 0;
public $foo; public $foo;
public $moo; public $moo;
@ -38,4 +40,9 @@ class ProxyManagerBridgeFooClass
{ {
$this->bar = $value; $this->bar = $value;
} }
public function __destruct()
{
++self::$destructorCount;
}
} }

View File

@ -27,8 +27,10 @@ class DebugBundle extends Bundle
$container = $this->container; $container = $this->container;
// This code is here to lazy load the dump stack. This default // This code is here to lazy load the dump stack. This default
// configuration for CLI mode is overridden in HTTP mode on // configuration is overridden in CLI mode on 'console.command' event.
// 'kernel.request' event // The dump data collector is used by default, so dump output is sent to
// the WDT. In a CLI context, if dump is used too soon, the data collector
// will buffer it, and release it at the end of the script.
VarDumper::setHandler(function ($var) use ($container) { VarDumper::setHandler(function ($var) use ($container) {
$dumper = $container->get('data_collector.dump'); $dumper = $container->get('data_collector.dump');
$cloner = $container->get('var_dumper.cloner'); $cloner = $container->get('var_dumper.cloner');

View File

@ -706,7 +706,7 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
* with a fluid interface. * with a fluid interface.
* *
* @param string $id The service identifier * @param string $id The service identifier
* @param string $class The service class * @param string $class|null The service class
* *
* @return Definition A Definition instance * @return Definition A Definition instance
*/ */

View File

@ -155,6 +155,13 @@ class Definition
return $this; return $this;
} }
/**
* Sets the properties to define when creating the service.
*
* @param array $properties
*
* @return $this
*/
public function setProperties(array $properties) public function setProperties(array $properties)
{ {
$this->properties = $properties; $this->properties = $properties;
@ -162,11 +169,24 @@ class Definition
return $this; return $this;
} }
/**
* Gets the properties to define when creating the service.
*
* @return array
*/
public function getProperties() public function getProperties()
{ {
return $this->properties; return $this->properties;
} }
/**
* Sets a specific property.
*
* @param string $name
* @param mixed $value
*
* @return $this
*/
public function setProperty($name, $value) public function setProperty($name, $value)
{ {
$this->properties[$name] = $value; $this->properties[$name] = $value;
@ -189,7 +209,7 @@ class Definition
} }
/** /**
* Sets a specific argument. * Replaces a specific argument.
* *
* @param int $index * @param int $index
* @param mixed $argument * @param mixed $argument
@ -672,7 +692,7 @@ class Definition
} }
/** /**
* Sets autowired. * Enables/disables autowiring.
* *
* @param bool $autowired * @param bool $autowired
* *

View File

@ -150,7 +150,7 @@ class BinaryFileResponse extends Response
* Sets the Content-Disposition header with the given filename. * Sets the Content-Disposition header with the given filename.
* *
* @param string $disposition ResponseHeaderBag::DISPOSITION_INLINE or ResponseHeaderBag::DISPOSITION_ATTACHMENT * @param string $disposition ResponseHeaderBag::DISPOSITION_INLINE or ResponseHeaderBag::DISPOSITION_ATTACHMENT
* @param string $filename Optionally use this filename instead of the real name of the file * @param string $filename Optionally use this UTF-8 encoded filename instead of the real name of the file
* @param string $filenameFallback A fallback filename, containing only ASCII characters. Defaults to an automatically encoded filename * @param string $filenameFallback A fallback filename, containing only ASCII characters. Defaults to an automatically encoded filename
* *
* @return $this * @return $this
@ -162,7 +162,7 @@ class BinaryFileResponse extends Response
} }
if ('' === $filenameFallback && (!preg_match('/^[\x20-\x7e]*$/', $filename) || false !== strpos($filename, '%'))) { if ('' === $filenameFallback && (!preg_match('/^[\x20-\x7e]*$/', $filename) || false !== strpos($filename, '%'))) {
$encoding = mb_detect_encoding($filename, null, true); $encoding = mb_detect_encoding($filename, null, true) ?: '8bit';
for ($i = 0, $filenameLength = mb_strlen($filename, $encoding); $i < $filenameLength; ++$i) { for ($i = 0, $filenameLength = mb_strlen($filename, $encoding); $i < $filenameLength; ++$i) {
$char = mb_substr($filename, $i, 1, $encoding); $char = mb_substr($filename, $i, 1, $encoding);

View File

@ -95,7 +95,9 @@ class MemcacheSessionHandler implements \SessionHandlerInterface
*/ */
public function destroy($sessionId) public function destroy($sessionId)
{ {
return $this->memcache->delete($this->prefix.$sessionId); $this->memcache->delete($this->prefix.$sessionId);
return true;
} }
/** /**

View File

@ -101,7 +101,9 @@ class MemcachedSessionHandler implements \SessionHandlerInterface
*/ */
public function destroy($sessionId) public function destroy($sessionId)
{ {
return $this->memcached->delete($this->prefix.$sessionId); $result = $this->memcached->delete($this->prefix.$sessionId);
return $result || $this->memcached->getResultCode() == \Memcached::RES_NOTFOUND;
} }
/** /**

View File

@ -68,6 +68,17 @@ class BinaryFileResponseTest extends ResponseTestCase
$this->assertSame('attachment; filename="f__.html"; filename*=utf-8\'\'f%C3%B6%C3%B6.html', $response->headers->get('Content-Disposition')); $this->assertSame('attachment; filename="f__.html"; filename*=utf-8\'\'f%C3%B6%C3%B6.html', $response->headers->get('Content-Disposition'));
} }
public function testSetContentDispositionGeneratesSafeFallbackFilenameForWronglyEncodedFilename()
{
$response = new BinaryFileResponse(__FILE__);
$iso88591EncodedFilename = utf8_decode('föö.html');
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $iso88591EncodedFilename);
// the parameter filename* is invalid in this case (rawurldecode('f%F6%F6') does not provide a UTF-8 string but an ISO-8859-1 encoded one)
$this->assertSame('attachment; filename="f__.html"; filename*=utf-8\'\'f%F6%F6.html', $response->headers->get('Content-Disposition'));
}
/** /**
* @dataProvider provideRanges * @dataProvider provideRanges
*/ */

View File

@ -142,11 +142,19 @@ class FileProfilerStorage implements ProfilerStorageInterface
} }
} }
$profileToken = $profile->getToken();
// when there are errors in sub-requests, the parent and/or children tokens
// may equal the profile token, resulting in infinite loops
$parentToken = $profile->getParentToken() !== $profileToken ? $profile->getParentToken() : null;
$childrenToken = array_filter(array_map(function ($p) use ($profileToken) {
return $profileToken !== $p->getToken() ? $p->getToken() : null;
}, $profile->getChildren()));
// Store profile // Store profile
$data = array( $data = array(
'token' => $profile->getToken(), 'token' => $profileToken,
'parent' => $profile->getParentToken(), 'parent' => $parentToken,
'children' => array_map(function ($p) { return $p->getToken(); }, $profile->getChildren()), 'children' => $childrenToken,
'data' => $profile->getCollectors(), 'data' => $profile->getCollectors(),
'ip' => $profile->getIp(), 'ip' => $profile->getIp(),
'method' => $profile->getMethod(), 'method' => $profile->getMethod(),

View File

@ -153,6 +153,7 @@ interface GuardAuthenticatorInterface extends AuthenticationEntryPointInterface
* done by having a _remember_me checkbox in your form, but * done by having a _remember_me checkbox in your form, but
* can be configured by the "always_remember_me" and "remember_me_parameter" * can be configured by the "always_remember_me" and "remember_me_parameter"
* parameters under the "remember_me" firewall key * parameters under the "remember_me" firewall key
* D) The onAuthenticationSuccess method returns a Response object
* *
* @return bool * @return bool
*/ */

View File

@ -14,8 +14,11 @@ namespace Symfony\Component\Security\Http;
final class SecurityEvents final class SecurityEvents
{ {
/** /**
* The INTERACTIVE_LOGIN event occurs after a user is logged in * The INTERACTIVE_LOGIN event occurs after a user has actively logged
* interactively for authentication based on http, cookies or X509. * into your website. It is important to distinguish this action from
* non-interactive authentication methods, such as:
* - authentication based on your session.
* - authentication using a HTTP basic or HTTP digest header.
* *
* @Event("Symfony\Component\Security\Http\Event\InteractiveLoginEvent") * @Event("Symfony\Component\Security\Http\Event\InteractiveLoginEvent")
* *