From e36099503fa9e3fb31506e0e2c618b057621f75a Mon Sep 17 00:00:00 2001 From: Sergey Rabochiy Date: Tue, 15 May 2018 18:05:47 +0700 Subject: [PATCH 001/108] [FrameworkBundle] Change priority of AddConsoleCommandPass to TYPE_BEFORE_REMOVING --- .../FrameworkBundle/FrameworkBundle.php | 2 +- .../AddConsoleCommandPassTest.php | 83 ++++++++++++++++++- 2 files changed, 80 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php index 17c12686dad23..6a05b436df143 100644 --- a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php +++ b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php @@ -107,7 +107,7 @@ public function build(ContainerBuilder $container) $this->addCompilerPassIfExists($container, AddConstraintValidatorsPass::class, PassConfig::TYPE_BEFORE_REMOVING); $container->addCompilerPass(new AddAnnotationsCachedReaderPass(), PassConfig::TYPE_AFTER_REMOVING, -255); $this->addCompilerPassIfExists($container, AddValidatorInitializersPass::class); - $this->addCompilerPassIfExists($container, AddConsoleCommandPass::class); + $this->addCompilerPassIfExists($container, AddConsoleCommandPass::class, PassConfig::TYPE_BEFORE_REMOVING); if (class_exists(TranslatorPass::class)) { // Arguments to be removed in 4.0, relying on the default values $container->addCompilerPass(new TranslatorPass('translator.default', 'translation.loader')); diff --git a/src/Symfony/Component/Console/Tests/DependencyInjection/AddConsoleCommandPassTest.php b/src/Symfony/Component/Console/Tests/DependencyInjection/AddConsoleCommandPassTest.php index 34f648610836a..67fbb98643f1e 100644 --- a/src/Symfony/Component/Console/Tests/DependencyInjection/AddConsoleCommandPassTest.php +++ b/src/Symfony/Component/Console/Tests/DependencyInjection/AddConsoleCommandPassTest.php @@ -12,10 +12,12 @@ namespace Symfony\Component\Console\Tests\DependencyInjection; use PHPUnit\Framework\TestCase; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\CommandLoader\ContainerCommandLoader; use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass; -use Symfony\Component\Console\Command\Command; use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\ChildDefinition; +use Symfony\Component\DependencyInjection\Compiler\PassConfig; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\TypedReference; @@ -28,7 +30,7 @@ class AddConsoleCommandPassTest extends TestCase public function testProcess($public) { $container = new ContainerBuilder(); - $container->addCompilerPass(new AddConsoleCommandPass()); + $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING); $container->setParameter('my-command.class', 'Symfony\Component\Console\Tests\DependencyInjection\MyCommand'); $definition = new Definition('%my-command.class%'); @@ -127,7 +129,7 @@ public function testProcessThrowAnExceptionIfTheServiceIsAbstract() { $container = new ContainerBuilder(); $container->setResourceTracking(false); - $container->addCompilerPass(new AddConsoleCommandPass()); + $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING); $definition = new Definition('Symfony\Component\Console\Tests\DependencyInjection\MyCommand'); $definition->addTag('console.command'); @@ -145,7 +147,7 @@ public function testProcessThrowAnExceptionIfTheServiceIsNotASubclassOfCommand() { $container = new ContainerBuilder(); $container->setResourceTracking(false); - $container->addCompilerPass(new AddConsoleCommandPass()); + $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING); $definition = new Definition('SplObjectStorage'); $definition->addTag('console.command'); @@ -175,6 +177,79 @@ public function testProcessPrivateServicesWithSameCommand() $this->assertTrue($container->hasAlias($alias1)); $this->assertTrue($container->hasAlias($alias2)); } + + public function testProcessOnChildDefinitionWithClass() + { + $container = new ContainerBuilder(); + $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING); + $className = 'Symfony\Component\Console\Tests\DependencyInjection\MyCommand'; + + $parentId = 'my-parent-command'; + $childId = 'my-child-command'; + + $parentDefinition = new Definition(/* no class */); + $parentDefinition->setAbstract(true)->setPublic(false); + + $childDefinition = new ChildDefinition($parentId); + $childDefinition->addTag('console.command')->setPublic(true); + $childDefinition->setClass($className); + + $container->setDefinition($parentId, $parentDefinition); + $container->setDefinition($childId, $childDefinition); + + $container->compile(); + $command = $container->get($childId); + + $this->assertInstanceOf($className, $command); + } + + public function testProcessOnChildDefinitionWithParentClass() + { + $container = new ContainerBuilder(); + $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING); + $className = 'Symfony\Component\Console\Tests\DependencyInjection\MyCommand'; + + $parentId = 'my-parent-command'; + $childId = 'my-child-command'; + + $parentDefinition = new Definition($className); + $parentDefinition->setAbstract(true)->setPublic(false); + + $childDefinition = new ChildDefinition($parentId); + $childDefinition->addTag('console.command')->setPublic(true); + + $container->setDefinition($parentId, $parentDefinition); + $container->setDefinition($childId, $childDefinition); + + $container->compile(); + $command = $container->get($childId); + + $this->assertInstanceOf($className, $command); + } + + /** + * @expectedException \RuntimeException + * @expectedExceptionMessage The definition for "my-child-command" has no class. + */ + public function testProcessOnChildDefinitionWithoutClass() + { + $container = new ContainerBuilder(); + $container->addCompilerPass(new AddConsoleCommandPass(), PassConfig::TYPE_BEFORE_REMOVING); + + $parentId = 'my-parent-command'; + $childId = 'my-child-command'; + + $parentDefinition = new Definition(); + $parentDefinition->setAbstract(true)->setPublic(false); + + $childDefinition = new ChildDefinition($parentId); + $childDefinition->addTag('console.command')->setPublic(true); + + $container->setDefinition($parentId, $parentDefinition); + $container->setDefinition($childId, $childDefinition); + + $container->compile(); + } } class MyCommand extends Command From ca314889e7fb7a8b5c1f58ca489b9a22b7e71293 Mon Sep 17 00:00:00 2001 From: Maxime Steinhausser Date: Sat, 26 May 2018 11:34:32 +0200 Subject: [PATCH 002/108] [Serializer] Fix serializer tries to denormalize null values on nullable properties --- .../Normalizer/AbstractNormalizer.php | 6 ++++ .../NullableConstructorArgumentDummy.php | 32 +++++++++++++++++++ .../Normalizer/AbstractNormalizerTest.php | 12 +++++++ 3 files changed, 50 insertions(+) create mode 100644 src/Symfony/Component/Serializer/Tests/Fixtures/NullableConstructorArgumentDummy.php diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index 74a133214f55b..cad6205dfb826 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -349,6 +349,12 @@ protected function instantiateObject(array &$data, $class, array &$context, \Ref } } elseif ($allowed && !$ignored && (isset($data[$key]) || array_key_exists($key, $data))) { $parameterData = $data[$key]; + if (null === $parameterData && $constructorParameter->allowsNull()) { + $params[] = null; + // Don't run set for a parameter passed to the constructor + unset($data[$key]); + continue; + } try { if (null !== $constructorParameter->getClass()) { if (!$this->serializer instanceof DenormalizerInterface) { diff --git a/src/Symfony/Component/Serializer/Tests/Fixtures/NullableConstructorArgumentDummy.php b/src/Symfony/Component/Serializer/Tests/Fixtures/NullableConstructorArgumentDummy.php new file mode 100644 index 0000000000000..616fab4ae8df0 --- /dev/null +++ b/src/Symfony/Component/Serializer/Tests/Fixtures/NullableConstructorArgumentDummy.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Serializer\Tests\Fixtures; + +class NullableConstructorArgumentDummy +{ + private $foo; + + public function __construct(?\stdClass $foo) + { + $this->foo = $foo; + } + + public function setFoo($foo) + { + $this->foo = 'this setter should not be called when using the constructor argument'; + } + + public function getFoo() + { + return $this->foo; + } +} diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php index e07fb56bf5b7f..28edc05872710 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractNormalizerTest.php @@ -9,6 +9,7 @@ use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Serializer\Tests\Fixtures\AbstractNormalizerDummy; +use Symfony\Component\Serializer\Tests\Fixtures\NullableConstructorArgumentDummy; use Symfony\Component\Serializer\Tests\Fixtures\ProxyDummy; use Symfony\Component\Serializer\Tests\Fixtures\StaticConstructorDummy; use Symfony\Component\Serializer\Tests\Fixtures\StaticConstructorNormalizer; @@ -116,4 +117,15 @@ public function testObjectWithStaticConstructor() $this->assertEquals('baz', $dummy->quz); $this->assertNull($dummy->foo); } + + /** + * @requires PHP 7.1 + */ + public function testObjectWithNullableConstructorArgument() + { + $normalizer = new ObjectNormalizer(); + $dummy = $normalizer->denormalize(array('foo' => null), NullableConstructorArgumentDummy::class); + + $this->assertNull($dummy->getFoo()); + } } From e3412e6a6732093920b08e8b2b612d8c21ea979c Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Thu, 17 May 2018 09:59:56 -0400 Subject: [PATCH 003/108] Triggering RememberMe's loginFail() when token cannot be created --- .../Http/Firewall/RememberMeListener.php | 20 +++++++++- .../Tests/Firewall/RememberMeListenerTest.php | 37 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Http/Firewall/RememberMeListener.php b/src/Symfony/Component/Security/Http/Firewall/RememberMeListener.php index fe670f3de1f38..d139e7a5facff 100644 --- a/src/Symfony/Component/Security/Http/Firewall/RememberMeListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/RememberMeListener.php @@ -68,7 +68,25 @@ public function handle(GetResponseEvent $event) } $request = $event->getRequest(); - if (null === $token = $this->rememberMeServices->autoLogin($request)) { + try { + if (null === $token = $this->rememberMeServices->autoLogin($request)) { + return; + } + } catch (AuthenticationException $e) { + if (null !== $this->logger) { + $this->logger->warning( + 'The token storage was not populated with remember-me token as the' + .' RememberMeServices was not able to create a token from the remember' + .' me information.', array('exception' => $e) + ); + } + + $this->rememberMeServices->loginFail($request); + + if (!$this->catchExceptions) { + throw $e; + } + return; } diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/RememberMeListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/RememberMeListenerTest.php index 2249dcbd2059d..6fb7e3c5924fa 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/RememberMeListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/RememberMeListenerTest.php @@ -143,6 +143,43 @@ public function testOnCoreSecurityIgnoresAuthenticationOptionallyRethrowsExcepti $listener->handle($event); } + public function testOnCoreSecurityAuthenticationExceptionDuringAutoLoginTriggersLoginFail() + { + list($listener, $tokenStorage, $service, $manager) = $this->getListener(); + + $tokenStorage + ->expects($this->once()) + ->method('getToken') + ->will($this->returnValue(null)) + ; + + $exception = new AuthenticationException('Authentication failed.'); + $service + ->expects($this->once()) + ->method('autoLogin') + ->will($this->throwException($exception)) + ; + + $service + ->expects($this->once()) + ->method('loginFail') + ; + + $manager + ->expects($this->never()) + ->method('authenticate') + ; + + $event = $this->getGetResponseEvent(); + $event + ->expects($this->once()) + ->method('getRequest') + ->will($this->returnValue(new Request())) + ; + + $listener->handle($event); + } + public function testOnCoreSecurity() { list($listener, $tokenStorage, $service, $manager) = $this->getListener(); From 9372e7a8136ab677b74c7a31a7a13b8ee1db10c5 Mon Sep 17 00:00:00 2001 From: Alexey Kopytko Date: Fri, 18 May 2018 18:18:34 +0900 Subject: [PATCH 004/108] [Process] Consider \"executable\" suffixes first on Windows --- .../Component/Process/ExecutableFinder.php | 2 +- .../Process/Tests/ExecutableFinderTest.php | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Process/ExecutableFinder.php b/src/Symfony/Component/Process/ExecutableFinder.php index 1ec6526d45efd..defa66de6b359 100644 --- a/src/Symfony/Component/Process/ExecutableFinder.php +++ b/src/Symfony/Component/Process/ExecutableFinder.php @@ -73,7 +73,7 @@ public function find($name, $default = null, array $extraDirs = array()) $suffixes = array(''); if ('\\' === DIRECTORY_SEPARATOR) { $pathExt = getenv('PATHEXT'); - $suffixes = array_merge($suffixes, $pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes); + $suffixes = array_merge($pathExt ? explode(PATH_SEPARATOR, $pathExt) : $this->suffixes, $suffixes); } foreach ($suffixes as $suffix) { foreach ($dirs as $dir) { diff --git a/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php b/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php index 3aaeb0fb88513..669e1b3eb6835 100644 --- a/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php +++ b/src/Symfony/Component/Process/Tests/ExecutableFinderTest.php @@ -129,6 +129,36 @@ public function testFindProcessInOpenBasedir() $this->assertSamePath(PHP_BINARY, $result); } + /** + * @requires PHP 5.4 + */ + public function testFindBatchExecutableOnWindows() + { + if (ini_get('open_basedir')) { + $this->markTestSkipped('Cannot test when open_basedir is set'); + } + if ('\\' !== DIRECTORY_SEPARATOR) { + $this->markTestSkipped('Can be only tested on windows'); + } + + $target = tempnam(sys_get_temp_dir(), 'example-windows-executable'); + + touch($target); + touch($target.'.BAT'); + + $this->assertFalse(is_executable($target)); + + $this->setPath(sys_get_temp_dir()); + + $finder = new ExecutableFinder(); + $result = $finder->find(basename($target), false); + + unlink($target); + unlink($target.'.BAT'); + + $this->assertSamePath($target.'.BAT', $result); + } + private function assertSamePath($expected, $tested) { if ('\\' === DIRECTORY_SEPARATOR) { From 18f55feef85c51368549833a89bcb223cd433a37 Mon Sep 17 00:00:00 2001 From: Kamil Madejski Date: Wed, 18 Apr 2018 13:57:06 +0200 Subject: [PATCH 005/108] [HttpKernel] Set first trusted proxy as REMOTE_ADDR in InlineFragmentRenderer. --- .../HttpKernel/Fragment/InlineFragmentRenderer.php | 4 +++- .../Tests/Fragment/InlineFragmentRendererTest.php | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php b/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php index 17ed967fb51c3..76c8e95d79434 100644 --- a/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php +++ b/src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php @@ -122,7 +122,9 @@ protected function createSubRequest($uri, Request $request) // Do nothing } - $server['REMOTE_ADDR'] = '127.0.0.1'; + $trustedProxies = Request::getTrustedProxies(); + $server['REMOTE_ADDR'] = $trustedProxies ? reset($trustedProxies) : '127.0.0.1'; + unset($server['HTTP_IF_MODIFIED_SINCE']); unset($server['HTTP_IF_NONE_MATCH']); diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php index 4c1d6a00c44c9..6ed3c86537602 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php @@ -56,6 +56,7 @@ public function testRenderWithObjectsAsAttributes() $subRequest->attributes->replace(array('object' => $object, '_format' => 'html', '_controller' => 'main_controller', '_locale' => 'en')); $subRequest->headers->set('x-forwarded-for', array('127.0.0.1')); $subRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1'); + $subRequest->server->set('REMOTE_ADDR', '1.1.1.1'); $strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($subRequest)); @@ -84,7 +85,7 @@ public function testRenderWithTrustedHeaderDisabled() { Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, ''); - $strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest(Request::create('/'))); + $strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest(Request::create('/', 'GET', array(), array(), array(), array('REMOTE_ADDR' => '1.1.1.1')))); $this->assertSame('foo', $strategy->render('/', Request::create('/'))->getContent()); } @@ -168,6 +169,7 @@ public function testESIHeaderIsKeptInSubrequest() { $expectedSubRequest = Request::create('/'); $expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"'); + $expectedSubRequest->server->set('REMOTE_ADDR', '1.1.1.1'); if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) { $expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1')); @@ -193,7 +195,7 @@ public function testESIHeaderIsKeptInSubrequestWithTrustedHeaderDisabled() public function testHeadersPossiblyResultingIn304AreNotAssignedToSubrequest() { - $expectedSubRequest = Request::create('/'); + $expectedSubRequest = Request::create('/', 'GET', array(), array(), array(), array('REMOTE_ADDR' => '1.1.1.1')); if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) { $expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1')); $expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1'); From 92e3023195e4afeed0568a4e94adf2dc2453aa1a Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 28 May 2018 17:16:05 +0200 Subject: [PATCH 006/108] [HttpKernel] fix registering IDE links --- src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php | 3 --- src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml | 1 + .../WebProfilerBundle/Controller/ExceptionController.php | 1 + .../HttpKernel/EventListener/ExceptionListener.php | 6 ++++-- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php index 17c12686dad23..2a62d391a7b22 100644 --- a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php +++ b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php @@ -61,9 +61,6 @@ class FrameworkBundle extends Bundle { public function boot() { - if (!ini_get('xdebug.file_link_format') && !get_cfg_var('xdebug.file_link_format')) { - ini_set('xdebug.file_link_format', $this->container->getParameter('debug.file_link_format')); - } ErrorHandler::register(null, false)->throwAt($this->container->getParameter('debug.error_handler.throw_at'), true); if ($this->container->hasParameter('kernel.trusted_proxies')) { diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml index 565aef68fd45c..f6dd2bb9df630 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml @@ -74,6 +74,7 @@ %kernel.debug% %kernel.charset% + %debug.file_link_format% diff --git a/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php b/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php index f008b0b5284fc..2137477a5cf35 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Controller/ExceptionController.php @@ -30,6 +30,7 @@ class ExceptionController protected $twig; protected $debug; protected $profiler; + private $fileLinkFormat; public function __construct(Profiler $profiler = null, Environment $twig, $debug, FileLinkFormatter $fileLinkFormat = null) { diff --git a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php index 3dfa4cd8ea79a..4d8ad1e7e5971 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php @@ -36,13 +36,15 @@ class ExceptionListener implements EventSubscriberInterface protected $logger; protected $debug; private $charset; + private $fileLinkFormat; - public function __construct($controller, LoggerInterface $logger = null, $debug = false, $charset = null) + public function __construct($controller, LoggerInterface $logger = null, $debug = false, $charset = null, $fileLinkFormat = null) { $this->controller = $controller; $this->logger = $logger; $this->debug = $debug; $this->charset = $charset; + $this->fileLinkFormat = $fileLinkFormat; } public function onKernelException(GetResponseForExceptionEvent $event) @@ -123,7 +125,7 @@ protected function duplicateRequest(\Exception $exception, Request $request) $attributes = array( 'exception' => $exception = FlattenException::create($exception), '_controller' => $this->controller ?: function () use ($exception) { - $handler = new ExceptionHandler($this->debug, $this->charset); + $handler = new ExceptionHandler($this->debug, $this->charset, $this->fileLinkFormat); return new Response($handler->getHtml($exception), $exception->getStatusCode(), $exception->getHeaders()); }, From 479aa9074b40ef9cc01c5369681c30a81b832ceb Mon Sep 17 00:00:00 2001 From: Davide Borsatto Date: Tue, 29 May 2018 10:57:40 +0200 Subject: [PATCH 007/108] Change PHPDoc in ResponseHeaderBag::getCookies() to help IDEs --- src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php b/src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php index a042328ca5229..c299c369288d6 100644 --- a/src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php +++ b/src/Symfony/Component/HttpFoundation/ResponseHeaderBag.php @@ -160,7 +160,7 @@ public function removeCookie($name, $path = '/', $domain = null) * * @param string $format * - * @return array + * @return Cookie[] * * @throws \InvalidArgumentException When the $format is invalid */ From 09c660d45442c09bdcbe790652783f861bd3922f Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 30 May 2018 06:18:11 +0200 Subject: [PATCH 008/108] removed unneeded comments in tests --- .../Tests/OptionsResolver2Dot6Test.php | 64 ------------------- 1 file changed, 64 deletions(-) diff --git a/src/Symfony/Component/OptionsResolver/Tests/OptionsResolver2Dot6Test.php b/src/Symfony/Component/OptionsResolver/Tests/OptionsResolver2Dot6Test.php index ffa2872243981..aeaf019969840 100644 --- a/src/Symfony/Component/OptionsResolver/Tests/OptionsResolver2Dot6Test.php +++ b/src/Symfony/Component/OptionsResolver/Tests/OptionsResolver2Dot6Test.php @@ -29,10 +29,6 @@ protected function setUp() $this->resolver = new OptionsResolver(); } - //////////////////////////////////////////////////////////////////////////// - // resolve() - //////////////////////////////////////////////////////////////////////////// - /** * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException * @expectedExceptionMessage The option "foo" does not exist. Defined options are: "a", "z". @@ -69,10 +65,6 @@ public function testResolveFailsFromLazyOption() $this->resolver->resolve(); } - //////////////////////////////////////////////////////////////////////////// - // setDefault()/hasDefault() - //////////////////////////////////////////////////////////////////////////// - public function testSetDefaultReturnsThis() { $this->assertSame($this->resolver, $this->resolver->setDefault('foo', 'bar')); @@ -115,10 +107,6 @@ public function testHasDefaultWithNullValue() $this->assertTrue($this->resolver->hasDefault('foo')); } - //////////////////////////////////////////////////////////////////////////// - // lazy setDefault() - //////////////////////////////////////////////////////////////////////////// - public function testSetLazyReturnsThis() { $this->assertSame($this->resolver, $this->resolver->setDefault('foo', function (Options $options) {})); @@ -232,10 +220,6 @@ public function testInvokeEachLazyOptionOnlyOnce() $this->assertSame(2, $calls); } - //////////////////////////////////////////////////////////////////////////// - // setRequired()/isRequired()/getRequiredOptions() - //////////////////////////////////////////////////////////////////////////// - public function testSetRequiredReturnsThis() { $this->assertSame($this->resolver, $this->resolver->setRequired('foo')); @@ -330,10 +314,6 @@ public function testGetRequiredOptions() $this->assertSame(array('foo', 'bar'), $this->resolver->getRequiredOptions()); } - //////////////////////////////////////////////////////////////////////////// - // isMissing()/getMissingOptions() - //////////////////////////////////////////////////////////////////////////// - public function testIsMissingIfNotSet() { $this->assertFalse($this->resolver->isMissing('foo')); @@ -373,10 +353,6 @@ public function testGetMissingOptions() $this->assertSame(array('bar'), $this->resolver->getMissingOptions()); } - //////////////////////////////////////////////////////////////////////////// - // setDefined()/isDefined()/getDefinedOptions() - //////////////////////////////////////////////////////////////////////////// - /** * @expectedException \Symfony\Component\OptionsResolver\Exception\AccessException */ @@ -474,10 +450,6 @@ public function testClearedOptionsAreNotDefined() $this->assertFalse($this->resolver->isDefined('foo')); } - //////////////////////////////////////////////////////////////////////////// - // setAllowedTypes() - //////////////////////////////////////////////////////////////////////////// - /** * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException */ @@ -568,10 +540,6 @@ public function testResolveSucceedsIfInstanceOfClass() $this->assertNotEmpty($this->resolver->resolve()); } - //////////////////////////////////////////////////////////////////////////// - // addAllowedTypes() - //////////////////////////////////////////////////////////////////////////// - /** * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException */ @@ -654,10 +622,6 @@ public function testAddAllowedTypesDoesNotOverwrite2() $this->assertNotEmpty($this->resolver->resolve()); } - //////////////////////////////////////////////////////////////////////////// - // setAllowedValues() - //////////////////////////////////////////////////////////////////////////// - /** * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException */ @@ -809,10 +773,6 @@ function () { return false; }, $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); } - //////////////////////////////////////////////////////////////////////////// - // addAllowedValues() - //////////////////////////////////////////////////////////////////////////// - /** * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException */ @@ -929,10 +889,6 @@ public function testResolveSucceedsIfAnyAddedClosureReturnsTrue2() $this->assertEquals(array('foo' => 'bar'), $this->resolver->resolve()); } - //////////////////////////////////////////////////////////////////////////// - // setNormalizer() - //////////////////////////////////////////////////////////////////////////// - public function testSetNormalizerReturnsThis() { $this->resolver->setDefault('foo', 'bar'); @@ -1184,10 +1140,6 @@ public function testNormalizerNotCalledForUnsetOptions() $this->assertEmpty($this->resolver->resolve()); } - //////////////////////////////////////////////////////////////////////////// - // setDefaults() - //////////////////////////////////////////////////////////////////////////// - public function testSetDefaultsReturnsThis() { $this->assertSame($this->resolver, $this->resolver->setDefaults(array('foo', 'bar'))); @@ -1222,10 +1174,6 @@ public function testFailIfSetDefaultsFromLazyOption() $this->resolver->resolve(); } - //////////////////////////////////////////////////////////////////////////// - // remove() - //////////////////////////////////////////////////////////////////////////// - public function testRemoveReturnsThis() { $this->resolver->setDefault('foo', 'bar'); @@ -1314,10 +1262,6 @@ public function testRemoveUnknownOptionIgnored() $this->assertNotNull($this->resolver->remove('foo')); } - //////////////////////////////////////////////////////////////////////////// - // clear() - //////////////////////////////////////////////////////////////////////////// - public function testClearReturnsThis() { $this->assertSame($this->resolver, $this->resolver->clear()); @@ -1404,10 +1348,6 @@ public function testClearOptionAndNormalizer() $this->assertEmpty($this->resolver->resolve()); } - //////////////////////////////////////////////////////////////////////////// - // ArrayAccess - //////////////////////////////////////////////////////////////////////////// - public function testArrayAccess() { $this->resolver->setDefault('default1', 0); @@ -1522,10 +1462,6 @@ public function testFailIfCyclicDependency() $this->resolver->resolve(); } - //////////////////////////////////////////////////////////////////////////// - // Countable - //////////////////////////////////////////////////////////////////////////// - public function testCount() { $this->resolver->setDefault('default', 0); From 28c8c85da1d5f93b141ab477c4f2a9761548f363 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 30 May 2018 06:26:49 +0200 Subject: [PATCH 009/108] removed unneeded comments in tests --- .../Component/OptionsResolver/Tests/OptionsResolverTest.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php b/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php index f50911d374553..12dc77b3c6b1c 100644 --- a/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php +++ b/src/Symfony/Component/OptionsResolver/Tests/OptionsResolverTest.php @@ -634,10 +634,6 @@ public function testResolveFailsIfNotInstanceOfClass() $this->resolver->resolve(); } - //////////////////////////////////////////////////////////////////////////// - // addAllowedTypes() - //////////////////////////////////////////////////////////////////////////// - /** * @expectedException \Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException */ From 8c62ecfad2001fe062559fd4a2f8893c31500411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Wed, 30 May 2018 07:26:26 +0200 Subject: [PATCH 010/108] CODEOWNERS: some more rules --- .github/CODEOWNERS | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index db1c2a8a6ff44..415464c40b9a8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,9 @@ +# Console +/src/Symfony/Component/Console/Logger/ConsoleLogger.php @dunglas +# DependencyInjection +/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php @dunglas +# HttpKernel +/src/Symfony/Component/HttpKernel/Log/Logger.php @dunglas # LDAP /src/Symfony/Component/Ldap/* @csarrazi # Lock @@ -5,6 +11,13 @@ # Messenger /src/Symfony/Bridge/Doctrine/Messenger/* @sroze /src/Symfony/Component/Messenger/* @sroze +# PropertyInfo +/src/Symfony/Component/PropertyInfo/* @dunglas +/src/Symfony/Bridge/Doctrine/PropertyInfo/* @dunglas +# Serializer +/src/Symfony/Component/Serializer/* @dunglas +# WebLink +/src/Symfony/Component/WebLink/* @dunglas # Workflow /src/Symfony/Bridge/Twig/Extension/WorkflowExtension.php @lyrixx /src/Symfony/Bridge/Twig/Tests/Extension/WorkflowExtensionTest.php @lyrixx From 52647b86bfc15d579f9a894a49eb73140f45a19b Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Wed, 30 May 2018 15:07:50 +0200 Subject: [PATCH 011/108] bumped Symfony version to 4.1.1 --- src/Symfony/Component/HttpKernel/Kernel.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index 3894f0a7c9c87..567268f2e1a8e 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -63,12 +63,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl private $requestStackSize = 0; private $resetServices = false; - const VERSION = '4.1.0'; - const VERSION_ID = 40100; + const VERSION = '4.1.1-DEV'; + const VERSION_ID = 40101; const MAJOR_VERSION = 4; const MINOR_VERSION = 1; - const RELEASE_VERSION = 0; - const EXTRA_VERSION = ''; + const RELEASE_VERSION = 1; + const EXTRA_VERSION = 'DEV'; const END_OF_MAINTENANCE = '01/2019'; const END_OF_LIFE = '07/2019'; From f5703dc6b3b01c549f9dc292887508b21c1238cd Mon Sep 17 00:00:00 2001 From: Maxime Steinhausser Date: Wed, 30 May 2018 19:32:47 +0200 Subject: [PATCH 012/108] [Messenger] Fix suggested enqueue adapter package --- src/Symfony/Component/Messenger/composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/composer.json b/src/Symfony/Component/Messenger/composer.json index adbd0e2a9f671..8a34c564e6f24 100644 --- a/src/Symfony/Component/Messenger/composer.json +++ b/src/Symfony/Component/Messenger/composer.json @@ -30,7 +30,7 @@ "symfony/var-dumper": "~3.4|~4.0" }, "suggest": { - "sroze/enqueue-bridge": "For using the php-enqueue library as a transport." + "enqueue/messenger-adapter": "For using the php-enqueue library as a transport." }, "autoload": { "psr-4": { "Symfony\\Component\\Messenger\\": "" }, From c09ca94a284817b2876f2e5b2d7ead002dd925a1 Mon Sep 17 00:00:00 2001 From: DonCallisto Date: Wed, 30 May 2018 11:57:41 +0200 Subject: [PATCH 013/108] Update UPGRADE-4.0.md This https://github.com/symfony/symfony/blob/3.4/src/Symfony/Component/Security/Guard/Firewall/GuardAuthenticationListener.php#L127 was not reported. --- UPGRADE-3.4.md | 3 +++ UPGRADE-4.0.md | 3 +++ src/Symfony/Component/Security/CHANGELOG.md | 2 ++ 3 files changed, 8 insertions(+) diff --git a/UPGRADE-3.4.md b/UPGRADE-3.4.md index 765e5cf467637..69dc6b000a945 100644 --- a/UPGRADE-3.4.md +++ b/UPGRADE-3.4.md @@ -344,6 +344,9 @@ Security * The `GuardAuthenticatorInterface` has been deprecated and will be removed in 4.0. Use `AuthenticatorInterface` instead. + + * When extending `AbstractGuardAuthenticator` it's deprecated to return `null` from `getCredentials()`. + Return `false` from `supports()` if no credentials available. SecurityBundle -------------- diff --git a/UPGRADE-4.0.md b/UPGRADE-4.0.md index 14dc6f07a6f8d..0e9e69ff80dcd 100644 --- a/UPGRADE-4.0.md +++ b/UPGRADE-4.0.md @@ -758,6 +758,9 @@ Security * The `GuardAuthenticatorInterface` interface has been removed. Use `AuthenticatorInterface` instead. + + * When extending `AbstractGuardAuthenticator` getCredentials() cannot return + `null` anymore, return false from `supports()` if no credentials available instead. SecurityBundle -------------- diff --git a/src/Symfony/Component/Security/CHANGELOG.md b/src/Symfony/Component/Security/CHANGELOG.md index bd1b7b59eb793..7ef21c03311a8 100644 --- a/src/Symfony/Component/Security/CHANGELOG.md +++ b/src/Symfony/Component/Security/CHANGELOG.md @@ -16,6 +16,8 @@ CHANGELOG * deprecated HTTP digest authentication * Added a new password encoder for the Argon2i hashing algorithm * deprecated `GuardAuthenticatorInterface` in favor of `AuthenticatorInterface` + * deprecated to return `null` from `getCredentials()` in classes that extend + `AbstractGuardAuthenticator`. Return `false` from `supports()` instead. 3.3.0 ----- From efe9beb1863f6a80fb975200c8dd6227d8f2befc Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 31 May 2018 12:02:37 +0200 Subject: [PATCH 014/108] [HttpKernel] Fix restoring trusted proxies in tests --- .../Tests/Processor/WebProcessorTest.php | 2 ++ .../HttpFoundation/Tests/RequestTest.php | 11 +------- .../ValidateRequestListenerTest.php | 5 ++++ .../Fragment/InlineFragmentRendererTest.php | 28 ++++++++++++++++--- .../Tests/HttpCache/HttpCacheTest.php | 2 ++ .../HttpKernel/Tests/HttpKernelTest.php | 2 ++ 6 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/Symfony/Bridge/Monolog/Tests/Processor/WebProcessorTest.php b/src/Symfony/Bridge/Monolog/Tests/Processor/WebProcessorTest.php index 51bddd1d9828c..6ce418d317319 100644 --- a/src/Symfony/Bridge/Monolog/Tests/Processor/WebProcessorTest.php +++ b/src/Symfony/Bridge/Monolog/Tests/Processor/WebProcessorTest.php @@ -49,6 +49,8 @@ public function testUseRequestClientIp() $this->assertEquals($server['REQUEST_METHOD'], $record['extra']['http_method']); $this->assertEquals($server['SERVER_NAME'], $record['extra']['server']); $this->assertEquals($server['HTTP_REFERER'], $record['extra']['referrer']); + + Request::setTrustedProxies(array()); } public function testCanBeConstructedWithExtraFields() diff --git a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php index 0080cf8ac530a..3b65bcc99c25d 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php @@ -20,6 +20,7 @@ class RequestTest extends TestCase { protected function tearDown() { + Request::setTrustedProxies(array()); Request::setTrustedHosts(array()); } @@ -750,8 +751,6 @@ public function testGetPort() )); $port = $request->getPort(); $this->assertEquals(80, $port, 'With only PROTO set and value is not recognized, getPort() defaults to 80.'); - - Request::setTrustedProxies(array()); } /** @@ -827,8 +826,6 @@ public function testGetClientIp($expected, $remoteAddr, $httpForwardedFor, $trus $request = $this->getRequestInstanceForClientIpTests($remoteAddr, $httpForwardedFor, $trustedProxies); $this->assertEquals($expected[0], $request->getClientIp()); - - Request::setTrustedProxies(array()); } /** @@ -839,8 +836,6 @@ public function testGetClientIps($expected, $remoteAddr, $httpForwardedFor, $tru $request = $this->getRequestInstanceForClientIpTests($remoteAddr, $httpForwardedFor, $trustedProxies); $this->assertEquals($expected, $request->getClientIps()); - - Request::setTrustedProxies(array()); } /** @@ -851,8 +846,6 @@ public function testGetClientIpsForwarded($expected, $remoteAddr, $httpForwarded $request = $this->getRequestInstanceForClientIpsForwardedTests($remoteAddr, $httpForwarded, $trustedProxies); $this->assertEquals($expected, $request->getClientIps()); - - Request::setTrustedProxies(array()); } public function getClientIpsForwardedProvider() @@ -975,8 +968,6 @@ public function testGetClientIpsWithAgreeingHeaders($httpForwarded, $httpXForwar $clientIps = $request->getClientIps(); - Request::setTrustedProxies(array()); - $this->assertSame($expectedIps, $clientIps); } diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/ValidateRequestListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/ValidateRequestListenerTest.php index 55dc59e13f716..388f1b814bdf6 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/ValidateRequestListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/ValidateRequestListenerTest.php @@ -21,6 +21,11 @@ class ValidateRequestListenerTest extends TestCase { + protected function tearDown() + { + Request::setTrustedProxies(array()); + } + /** * @expectedException \Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException */ diff --git a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php index 6ed3c86537602..998b372181bb1 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php @@ -56,7 +56,6 @@ public function testRenderWithObjectsAsAttributes() $subRequest->attributes->replace(array('object' => $object, '_format' => 'html', '_controller' => 'main_controller', '_locale' => 'en')); $subRequest->headers->set('x-forwarded-for', array('127.0.0.1')); $subRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1'); - $subRequest->server->set('REMOTE_ADDR', '1.1.1.1'); $strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($subRequest)); @@ -85,7 +84,7 @@ public function testRenderWithTrustedHeaderDisabled() { Request::setTrustedHeaderName(Request::HEADER_CLIENT_IP, ''); - $strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest(Request::create('/', 'GET', array(), array(), array(), array('REMOTE_ADDR' => '1.1.1.1')))); + $strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest(Request::create('/'))); $this->assertSame('foo', $strategy->render('/', Request::create('/'))->getContent()); } @@ -169,7 +168,6 @@ public function testESIHeaderIsKeptInSubrequest() { $expectedSubRequest = Request::create('/'); $expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"'); - $expectedSubRequest->server->set('REMOTE_ADDR', '1.1.1.1'); if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) { $expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1')); @@ -195,7 +193,7 @@ public function testESIHeaderIsKeptInSubrequestWithTrustedHeaderDisabled() public function testHeadersPossiblyResultingIn304AreNotAssignedToSubrequest() { - $expectedSubRequest = Request::create('/', 'GET', array(), array(), array(), array('REMOTE_ADDR' => '1.1.1.1')); + $expectedSubRequest = Request::create('/'); if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) { $expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1')); $expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1'); @@ -206,6 +204,28 @@ public function testHeadersPossiblyResultingIn304AreNotAssignedToSubrequest() $strategy->render('/', $request); } + public function testFirstTrustedProxyIsSetAsRemote() + { + $expectedSubRequest = Request::create('/'); + $expectedSubRequest->headers->set('Surrogate-Capability', 'abc="ESI/1.0"'); + $expectedSubRequest->server->set('REMOTE_ADDR', '1.1.1.1'); + + if (Request::getTrustedHeaderName(Request::HEADER_CLIENT_IP)) { + $expectedSubRequest->headers->set('x-forwarded-for', array('127.0.0.1')); + $expectedSubRequest->server->set('HTTP_X_FORWARDED_FOR', '127.0.0.1'); + } + + Request::setTrustedProxies(array('1.1.1.1')); + + $strategy = new InlineFragmentRenderer($this->getKernelExpectingRequest($expectedSubRequest)); + + $request = Request::create('/'); + $request->headers->set('Surrogate-Capability', 'abc="ESI/1.0"'); + $strategy->render('/', $request); + + Request::setTrustedProxies(array()); + } + /** * Creates a Kernel expecting a request equals to $request * Allows delta in comparison in case REQUEST_TIME changed by 1 second. diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php index d6902f4880abf..41c2d57833769 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php @@ -1315,6 +1315,8 @@ public function testHttpCacheIsSetAsATrustedProxy(array $existing, array $expect $this->request('GET', '/', array('REMOTE_ADDR' => '10.0.0.1')); $this->assertEquals($expected, Request::getTrustedProxies()); + + Request::setTrustedProxies(array()); } public function getTrustedProxyData() diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php index 448dc10cf1185..22d9907e5cd9e 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpKernelTest.php @@ -291,6 +291,8 @@ public function testInconsistentClientIpsOnMasterRequests() $request->headers->set('X_FORWARDED_FOR', '3.3.3.3'); $kernel->handle($request, $kernel::MASTER_REQUEST, false); + + Request::setTrustedProxies(array()); } protected function getResolver($controller = null) From 68994a662e72fe22542dfdea7789ea04910cd4d1 Mon Sep 17 00:00:00 2001 From: Titouan Galopin Date: Thu, 31 May 2018 18:52:49 +0200 Subject: [PATCH 015/108] [FrameworkBundle][TwigBridge] Fix BC break from strong dependency on CSRF token storage --- .../Bridge/Twig/Extension/CsrfExtension.php | 16 ++------- .../Bridge/Twig/Extension/CsrfRuntime.php | 33 +++++++++++++++++++ .../Resources/config/security_csrf.xml | 6 +++- 3 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 src/Symfony/Bridge/Twig/Extension/CsrfRuntime.php diff --git a/src/Symfony/Bridge/Twig/Extension/CsrfExtension.php b/src/Symfony/Bridge/Twig/Extension/CsrfExtension.php index 97f3484a29776..2f061acfd3ae1 100644 --- a/src/Symfony/Bridge/Twig/Extension/CsrfExtension.php +++ b/src/Symfony/Bridge/Twig/Extension/CsrfExtension.php @@ -11,34 +11,22 @@ namespace Symfony\Bridge\Twig\Extension; -use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; /** * @author Christian Flothmann + * @author Titouan Galopin */ class CsrfExtension extends AbstractExtension { - private $csrfTokenManager; - - public function __construct(CsrfTokenManagerInterface $csrfTokenManager) - { - $this->csrfTokenManager = $csrfTokenManager; - } - /** * {@inheritdoc} */ public function getFunctions(): array { return array( - new TwigFunction('csrf_token', array($this, 'getCsrfToken')), + new TwigFunction('csrf_token', array(CsrfRuntime::class, 'getCsrfToken')), ); } - - public function getCsrfToken(string $tokenId): string - { - return $this->csrfTokenManager->getToken($tokenId)->getValue(); - } } diff --git a/src/Symfony/Bridge/Twig/Extension/CsrfRuntime.php b/src/Symfony/Bridge/Twig/Extension/CsrfRuntime.php new file mode 100644 index 0000000000000..1b2910c830cba --- /dev/null +++ b/src/Symfony/Bridge/Twig/Extension/CsrfRuntime.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\Twig\Extension; + +use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; + +/** + * @author Christian Flothmann + * @author Titouan Galopin + */ +class CsrfRuntime +{ + private $csrfTokenManager; + + public function __construct(CsrfTokenManagerInterface $csrfTokenManager) + { + $this->csrfTokenManager = $csrfTokenManager; + } + + public function getCsrfToken(string $tokenId): string + { + return $this->csrfTokenManager->getToken($tokenId)->getValue(); + } +} diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/security_csrf.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/security_csrf.xml index e7bcec1c5fa33..d13e3c7fab738 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/security_csrf.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/security_csrf.xml @@ -22,9 +22,13 @@ + + + + + - From 146e01cb4442fbcb3b05dd8ae2569d9894374044 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 1 Jun 2018 14:37:16 +0200 Subject: [PATCH 016/108] [HttpKernel] fix session tracking in surrogate master requests --- .../HttpFoundation/Session/Session.php | 19 +++++++--- .../Session/SessionBagProxy.php | 14 +++++-- .../EventListener/AbstractSessionListener.php | 17 ++++++++- .../EventListener/SessionListenerTest.php | 38 ++++++++++++++++++- .../Component/HttpKernel/composer.json | 2 +- 5 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/Symfony/Component/HttpFoundation/Session/Session.php b/src/Symfony/Component/HttpFoundation/Session/Session.php index a46cffbb8dbd6..f0379c1697b82 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Session.php +++ b/src/Symfony/Component/HttpFoundation/Session/Session.php @@ -29,7 +29,7 @@ class Session implements SessionInterface, \IteratorAggregate, \Countable private $flashName; private $attributeName; private $data = array(); - private $hasBeenStarted; + private $usageIndex = 0; /** * @param SessionStorageInterface $storage A SessionStorageInterface instance @@ -54,6 +54,8 @@ public function __construct(SessionStorageInterface $storage = null, AttributeBa */ public function start() { + ++$this->usageIndex; + return $this->storage->start(); } @@ -142,13 +144,13 @@ public function count() } /** - * @return bool + * @return int * * @internal */ - public function hasBeenStarted() + public function getUsageIndex() { - return $this->hasBeenStarted; + return $this->usageIndex; } /** @@ -158,6 +160,7 @@ public function hasBeenStarted() */ public function isEmpty() { + ++$this->usageIndex; foreach ($this->data as &$data) { if (!empty($data)) { return false; @@ -182,6 +185,8 @@ public function invalidate($lifetime = null) */ public function migrate($destroy = false, $lifetime = null) { + ++$this->usageIndex; + return $this->storage->regenerate($destroy, $lifetime); } @@ -190,6 +195,8 @@ public function migrate($destroy = false, $lifetime = null) */ public function save() { + ++$this->usageIndex; + $this->storage->save(); } @@ -230,6 +237,8 @@ public function setName($name) */ public function getMetadataBag() { + ++$this->usageIndex; + return $this->storage->getMetadataBag(); } @@ -238,7 +247,7 @@ public function getMetadataBag() */ public function registerBag(SessionBagInterface $bag) { - $this->storage->registerBag(new SessionBagProxy($bag, $this->data, $this->hasBeenStarted)); + $this->storage->registerBag(new SessionBagProxy($bag, $this->data, $this->usageIndex)); } /** diff --git a/src/Symfony/Component/HttpFoundation/Session/SessionBagProxy.php b/src/Symfony/Component/HttpFoundation/Session/SessionBagProxy.php index 307836d5f9461..88005ee092e2a 100644 --- a/src/Symfony/Component/HttpFoundation/Session/SessionBagProxy.php +++ b/src/Symfony/Component/HttpFoundation/Session/SessionBagProxy.php @@ -20,13 +20,13 @@ final class SessionBagProxy implements SessionBagInterface { private $bag; private $data; - private $hasBeenStarted; + private $usageIndex; - public function __construct(SessionBagInterface $bag, array &$data, &$hasBeenStarted) + public function __construct(SessionBagInterface $bag, array &$data, &$usageIndex) { $this->bag = $bag; $this->data = &$data; - $this->hasBeenStarted = &$hasBeenStarted; + $this->usageIndex = &$usageIndex; } /** @@ -34,6 +34,8 @@ public function __construct(SessionBagInterface $bag, array &$data, &$hasBeenSta */ public function getBag() { + ++$this->usageIndex; + return $this->bag; } @@ -42,6 +44,8 @@ public function getBag() */ public function isEmpty() { + ++$this->usageIndex; + return empty($this->data[$this->bag->getStorageKey()]); } @@ -58,7 +62,7 @@ public function getName() */ public function initialize(array &$array) { - $this->hasBeenStarted = true; + ++$this->usageIndex; $this->data[$this->bag->getStorageKey()] = &$array; $this->bag->initialize($array); @@ -77,6 +81,8 @@ public function getStorageKey() */ public function clear() { + ++$this->usageIndex; + return $this->bag->clear(); } } diff --git a/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php b/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php index dff29ee80b418..a54ca62d87b6c 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/AbstractSessionListener.php @@ -14,6 +14,7 @@ use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\Event\FinishRequestEvent; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\KernelEvents; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -25,6 +26,8 @@ */ abstract class AbstractSessionListener implements EventSubscriberInterface { + private $sessionUsageStack = array(); + public function onKernelRequest(GetResponseEvent $event) { if (!$event->isMasterRequest()) { @@ -33,6 +36,7 @@ public function onKernelRequest(GetResponseEvent $event) $request = $event->getRequest(); $session = $this->getSession(); + $this->sessionUsageStack[] = $session instanceof Session ? $session->getUsageIndex() : null; if (null === $session || $request->hasSession()) { return; } @@ -50,7 +54,7 @@ public function onKernelResponse(FilterResponseEvent $event) return; } - if ($session->isStarted() || ($session instanceof Session && $session->hasBeenStarted())) { + if ($session instanceof Session ? $session->getUsageIndex() !== end($this->sessionUsageStack) : $session->isStarted()) { $event->getResponse() ->setPrivate() ->setMaxAge(0) @@ -58,12 +62,23 @@ public function onKernelResponse(FilterResponseEvent $event) } } + /** + * @internal + */ + public function onFinishRequest(FinishRequestEvent $event) + { + if ($event->isMasterRequest()) { + array_pop($this->sessionUsageStack); + } + } + public static function getSubscribedEvents() { return array( KernelEvents::REQUEST => array('onKernelRequest', 128), // low priority to come after regular response listeners, same as SaveSessionListener KernelEvents::RESPONSE => array('onKernelResponse', -1000), + KernelEvents::FINISH_REQUEST => array('onFinishRequest'), ); } diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php index 34598363c8914..a6416e7f693df 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php @@ -18,6 +18,7 @@ use Symfony\Component\HttpFoundation\Session\Session; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; +use Symfony\Component\HttpKernel\Event\FinishRequestEvent; use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener; use Symfony\Component\HttpKernel\EventListener\SessionListener; use Symfony\Component\HttpKernel\HttpKernelInterface; @@ -58,8 +59,7 @@ public function testSessionIsSet() public function testResponseIsPrivate() { $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock(); - $session->expects($this->once())->method('isStarted')->willReturn(false); - $session->expects($this->once())->method('hasBeenStarted')->willReturn(true); + $session->expects($this->exactly(2))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1)); $container = new Container(); $container->set('session', $session); @@ -76,4 +76,38 @@ public function testResponseIsPrivate() $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate')); $this->assertSame('0', $response->headers->getCacheControlDirective('max-age')); } + + public function testSurrogateMasterRequestIsPublic() + { + $session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock(); + $session->expects($this->exactly(4))->method('getUsageIndex')->will($this->onConsecutiveCalls(0, 1, 1, 1)); + + $container = new Container(); + $container->set('session', $session); + + $listener = new SessionListener($container); + $kernel = $this->getMockBuilder(HttpKernelInterface::class)->disableOriginalConstructor()->getMock(); + + $request = new Request(); + $response = new Response(); + $response->setCache(array('public' => true, 'max_age' => '30')); + $listener->onKernelRequest(new GetResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST)); + $this->assertTrue($request->hasSession()); + + $subRequest = clone $request; + $this->assertSame($request->getSession(), $subRequest->getSession()); + $listener->onKernelRequest(new GetResponseEvent($kernel, $subRequest, HttpKernelInterface::MASTER_REQUEST)); + $listener->onKernelResponse(new FilterResponseEvent($kernel, $subRequest, HttpKernelInterface::MASTER_REQUEST, $response)); + $listener->onFinishRequest(new FinishRequestEvent($kernel, $subRequest, HttpKernelInterface::MASTER_REQUEST)); + + $this->assertFalse($response->headers->hasCacheControlDirective('private')); + $this->assertFalse($response->headers->hasCacheControlDirective('must-revalidate')); + $this->assertSame('30', $response->headers->getCacheControlDirective('max-age')); + + $listener->onKernelResponse(new FilterResponseEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, $response)); + + $this->assertTrue($response->headers->hasCacheControlDirective('private')); + $this->assertTrue($response->headers->hasCacheControlDirective('must-revalidate')); + $this->assertSame('0', $response->headers->getCacheControlDirective('max-age')); + } } diff --git a/src/Symfony/Component/HttpKernel/composer.json b/src/Symfony/Component/HttpKernel/composer.json index 17c0544c62560..585ab5b37dbaa 100644 --- a/src/Symfony/Component/HttpKernel/composer.json +++ b/src/Symfony/Component/HttpKernel/composer.json @@ -18,7 +18,7 @@ "require": { "php": "^5.5.9|>=7.0.8", "symfony/event-dispatcher": "~2.8|~3.0|~4.0", - "symfony/http-foundation": "^3.4.4|^4.0.4", + "symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1", "symfony/debug": "~2.8|~3.0|~4.0", "symfony/polyfill-ctype": "~1.8", "psr/log": "~1.0" From 11a14e001cde9c57a0cbd7df61ab6f7ba51ab596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ostroluck=C3=BD?= Date: Sat, 2 Jun 2018 19:48:17 +0200 Subject: [PATCH 017/108] simple-phpunit: remove outdated appveryor workaround --- src/Symfony/Bridge/PhpUnit/bin/simple-phpunit | 24 +------------------ 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit b/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit index 59c7a1fe3565e..552d5abb36b5e 100755 --- a/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit +++ b/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit @@ -188,15 +188,6 @@ if ($components) { } } - // Fixes for colors support on appveyor - // See https://github.com/appveyor/ci/issues/373 - $colorFixes = array( - array("S\033[0m\033[0m\033[36m\033[1mS", "E\033[0m\033[0m\033[31m\033[1mE", "I\033[0m\033[0m\033[33m\033[1mI", "F\033[0m\033[0m\033[41m\033[37mF"), - array("SS", "EE", "II", "FF"), - ); - $colorFixes[0] = array_merge($colorFixes[0], $colorFixes[0]); - $colorFixes[1] = array_merge($colorFixes[1], $colorFixes[1]); - while ($runningProcs) { usleep(300000); $terminatedProcs = array(); @@ -212,20 +203,7 @@ if ($components) { foreach ($terminatedProcs as $component => $procStatus) { foreach (array('out', 'err') as $file) { $file = "$component/phpunit.std$file"; - - if ('\\' === DIRECTORY_SEPARATOR) { - $h = fopen($file, 'rb'); - while (false !== $line = fgets($h)) { - echo str_replace($colorFixes[0], $colorFixes[1], preg_replace( - '/(\033\[[0-9]++);([0-9]++m)(?:(.)(\033\[0m))?/', - "$1m\033[$2$3$4$4", - $line - )); - } - fclose($h); - } else { - readfile($file); - } + readfile($file); unlink($file); } From a0015a18ecee87ed30dea6e34358e9ce9792e2e0 Mon Sep 17 00:00:00 2001 From: Roland Franssen Date: Fri, 1 Jun 2018 19:28:37 +0200 Subject: [PATCH 018/108] [DI] Remove default env type check on validate --- .../Component/Config/Definition/BaseNode.php | 28 +++++-------------- .../Compiler/ValidateEnvPlaceholdersPass.php | 22 +++++++-------- .../ValidateEnvPlaceholdersPassTest.php | 28 +++++++++---------- .../DependencyInjection/composer.json | 2 +- 4 files changed, 32 insertions(+), 48 deletions(-) diff --git a/src/Symfony/Component/Config/Definition/BaseNode.php b/src/Symfony/Component/Config/Definition/BaseNode.php index a49e0b0bdc86e..00aa212bdc404 100644 --- a/src/Symfony/Component/Config/Definition/BaseNode.php +++ b/src/Symfony/Component/Config/Definition/BaseNode.php @@ -507,35 +507,21 @@ private static function resolvePlaceholderValue($value) return $value; } - private static function getType($value): string - { - switch ($type = \gettype($value)) { - case 'boolean': - return 'bool'; - case 'double': - return 'float'; - case 'integer': - return 'int'; - } - - return $type; - } - private function doValidateType($value): void { - if (null === $this->handlingPlaceholder || null === $value) { - $this->validateType($value); - - return; - } - - if (!$this->allowPlaceholders()) { + if (null !== $this->handlingPlaceholder && !$this->allowPlaceholders()) { $e = new InvalidTypeException(sprintf('A dynamic value is not compatible with a "%s" node type at path "%s".', get_class($this), $this->getPath())); $e->setPath($this->getPath()); throw $e; } + if (null === $this->handlingPlaceholder || null === $value) { + $this->validateType($value); + + return; + } + $knownTypes = array_keys(self::$placeholders[$this->handlingPlaceholder]); $validTypes = $this->getValidPlaceholderTypes(); diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php index 1fe57f9db6cfb..09c83ce3bf2ee 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php @@ -14,7 +14,6 @@ use Symfony\Component\Config\Definition\BaseNode; use Symfony\Component\Config\Definition\Processor; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Exception\LogicException; use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface; use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag; @@ -42,21 +41,20 @@ public function process(ContainerBuilder $container) return; } - $defaultBag = new ParameterBag($container->getParameterBag()->all()); + $defaultBag = new ParameterBag($resolvingBag->all()); $envTypes = $resolvingBag->getProvidedTypes(); try { foreach ($resolvingBag->getEnvPlaceholders() + $resolvingBag->getUnusedEnvPlaceholders() as $env => $placeholders) { - $prefix = (false === $i = strpos($env, ':')) ? 'string' : substr($env, 0, $i); - $types = $envTypes[$prefix] ?? array('string'); - $default = ($hasEnv = (false === $i && $defaultBag->has("env($env)"))) ? $defaultBag->get("env($env)") : null; - - if (null !== $default && !in_array($type = self::getType($default), $types, true)) { - throw new LogicException(sprintf('Invalid type for env parameter "env(%s)". Expected "%s", but got "%s".', $env, implode('", "', $types), $type)); - } - $values = array(); - foreach ($types as $type) { - $values[$type] = $hasEnv ? $default : self::$typeFixtures[$type] ?? null; + if (false === $i = strpos($env, ':')) { + $default = $defaultBag->has("env($env)") ? $defaultBag->get("env($env)") : null; + $defaultType = null !== $default ? self::getType($default) : 'string'; + $values[$defaultType] = $default; + } else { + $prefix = substr($env, 0, $i); + foreach ($envTypes[$prefix] ?? array('string') as $type) { + $values[$type] = self::$typeFixtures[$type] ?? null; + } } foreach ($placeholders as $placeholder) { BaseNode::setPlaceholder($placeholder, $values); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php index bd554cd285901..9534b11a90bb2 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php @@ -22,31 +22,31 @@ class ValidateEnvPlaceholdersPassTest extends TestCase { - /** - * @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException - * @expectedExceptionMessage Invalid type for env parameter "env(FOO)". Expected "string", but got "bool". - */ - public function testDefaultEnvIsValidatedByType() + public function testEnvsAreValidatedInConfig() { $container = new ContainerBuilder(); - $container->setParameter('env(FOO)', true); - $container->registerExtension(new EnvExtension()); - $container->prependExtensionConfig('env_extension', array( - 'scalar_node' => '%env(FOO)%', + $container->setParameter('env(NULLED)', null); + $container->setParameter('env(FLOATISH)', 3.2); + $container->registerExtension($ext = new EnvExtension()); + $container->prependExtensionConfig('env_extension', $expected = array( + 'scalar_node' => '%env(NULLED)%', + 'scalar_node_not_empty' => '%env(FLOATISH)%', + 'int_node' => '%env(int:FOO)%', + 'float_node' => '%env(float:BAR)%', )); $this->doProcess($container); + + $this->assertSame($expected, $container->resolveEnvPlaceholders($ext->getConfig())); } - public function testEnvsAreValidatedInConfig() + public function testDefaultEnvWithoutPrefixIsValidatedInConfig() { $container = new ContainerBuilder(); - $container->setParameter('env(NULLED)', null); + $container->setParameter('env(FLOATISH)', 3.2); $container->registerExtension($ext = new EnvExtension()); $container->prependExtensionConfig('env_extension', $expected = array( - 'scalar_node' => '%env(NULLED)%', - 'int_node' => '%env(int:FOO)%', - 'float_node' => '%env(float:BAR)%', + 'float_node' => '%env(FLOATISH)%', )); $this->doProcess($container); diff --git a/src/Symfony/Component/DependencyInjection/composer.json b/src/Symfony/Component/DependencyInjection/composer.json index 8230395645c7c..12758018f22da 100644 --- a/src/Symfony/Component/DependencyInjection/composer.json +++ b/src/Symfony/Component/DependencyInjection/composer.json @@ -32,7 +32,7 @@ "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them" }, "conflict": { - "symfony/config": "<4.1", + "symfony/config": "<4.1.1", "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" From a8f41289c4b8b189a162d3c87987440b66beacf6 Mon Sep 17 00:00:00 2001 From: Niels Keurentjes Date: Thu, 31 May 2018 12:02:59 +0200 Subject: [PATCH 019/108] [DX] Improve exception message when AbstractController::getParameter fails --- .../Controller/AbstractController.php | 3 ++- .../Controller/AbstractControllerTest.php | 26 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Controller/AbstractController.php b/src/Symfony/Bundle/FrameworkBundle/Controller/AbstractController.php index b317786c68583..7286162c2e5ac 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Controller/AbstractController.php +++ b/src/Symfony/Bundle/FrameworkBundle/Controller/AbstractController.php @@ -13,6 +13,7 @@ use Psr\Container\ContainerInterface; use Doctrine\Common\Persistence\ManagerRegistry; +use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface; use Symfony\Component\DependencyInjection\ServiceSubscriberInterface; use Symfony\Component\Form\FormFactoryInterface; @@ -64,7 +65,7 @@ public function setContainer(ContainerInterface $container) protected function getParameter(string $name) { if (!$this->container->has('parameter_bag')) { - throw new \LogicException('The "parameter_bag" service is not available. Try running "composer require dependency-injection:^4.1"'); + throw new ServiceNotFoundException('parameter_bag', null, null, array(), sprintf('The "%s::getParameter()" method is missing a parameter bag to work properly. Did you forget to register your controller as a service subscriber? This can be fixed either by using autoconfiguration or by manually wiring a "parameter_bag" in the service locator passed to the controller.', get_class($this))); } return $this->container->get('parameter_bag')->get($name); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/AbstractControllerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/AbstractControllerTest.php index 0ae42c14ce317..03b451528d48f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/AbstractControllerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/AbstractControllerTest.php @@ -52,20 +52,32 @@ public function testSubscribedServices() public function testGetParameter() { + if (!class_exists(ContainerBag::class)) { + $this->markTestSkipped('ContainerBag class does not exist'); + } + $container = new Container(new FrozenParameterBag(array('foo' => 'bar'))); + $container->set('parameter_bag', new ContainerBag($container)); $controller = $this->createController(); $controller->setContainer($container); - if (!class_exists(ContainerBag::class)) { - $this->expectException(\LogicException::class); - $this->expectExceptionMessage('The "parameter_bag" service is not available. Try running "composer require dependency-injection:^4.1"'); - } else { - $container->set('parameter_bag', new ContainerBag($container)); - } - $this->assertSame('bar', $controller->getParameter('foo')); } + + /** + * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException + * @expectedExceptionMessage TestAbstractController::getParameter()" method is missing a parameter bag + */ + public function testMissingParameterBag() + { + $container = new Container(); + + $controller = $this->createController(); + $controller->setContainer($container); + + $controller->getParameter('foo'); + } } class TestAbstractController extends AbstractController From e3aa90f852f69040be19da3d8729cdf02d238ec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 4 Jun 2018 10:07:03 +0200 Subject: [PATCH 020/108] =?UTF-8?q?[BrowserKit]=20Fix=20a=20BC=20break=20i?= =?UTF-8?q?n=20Client=20affecting=20Panth=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Symfony/Component/BrowserKit/Client.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/BrowserKit/Client.php b/src/Symfony/Component/BrowserKit/Client.php index 799b3579f0f69..d5909b7c80191 100644 --- a/src/Symfony/Component/BrowserKit/Client.php +++ b/src/Symfony/Component/BrowserKit/Client.php @@ -284,14 +284,16 @@ public function click(Link $link) /** * Submits a form. * - * @param Form $form A Form instance - * @param array $values An array of form field values + * @param Form $form A Form instance + * @param array $values An array of form field values + * @param array $serverParameters An array of server parameters * * @return Crawler */ - public function submit(Form $form, array $values = array(), $serverParameters = array()) + public function submit(Form $form, array $values = array()/*, array $serverParameters = array()*/) { $form->setValues($values); + $serverParameters = 2 < \func_num_args() ? func_get_arg(2) : array(); return $this->request($form->getMethod(), $form->getUri(), $form->getPhpValues(), $form->getPhpFiles(), $serverParameters); } From dd4b0edb22bedc666237a6320cb861a7a1afa9ec Mon Sep 17 00:00:00 2001 From: Maxime Steinhausser Date: Mon, 4 Jun 2018 19:45:48 +0200 Subject: [PATCH 021/108] [DebugBundle] DebugBundle::registerCommands should be noop --- src/Symfony/Bundle/DebugBundle/DebugBundle.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Symfony/Bundle/DebugBundle/DebugBundle.php b/src/Symfony/Bundle/DebugBundle/DebugBundle.php index b00c06af78289..04fd507612747 100644 --- a/src/Symfony/Bundle/DebugBundle/DebugBundle.php +++ b/src/Symfony/Bundle/DebugBundle/DebugBundle.php @@ -12,6 +12,7 @@ namespace Symfony\Bundle\DebugBundle; use Symfony\Bundle\DebugBundle\DependencyInjection\Compiler\DumpDataCollectorPass; +use Symfony\Component\Console\Application; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\VarDumper\VarDumper; @@ -52,4 +53,9 @@ public function build(ContainerBuilder $container) $container->addCompilerPass(new DumpDataCollectorPass()); } + + public function registerCommands(Application $application) + { + // noop + } } From 7a750d4508b6edbcf93f4149b79a96ef4a161485 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 4 Jun 2018 19:54:36 +0200 Subject: [PATCH 022/108] [Routing] Don't reorder past variable-length placeholders --- .../Matcher/Dumper/StaticPrefixCollection.php | 2 +- .../Tests/Fixtures/dumper/url_matcher12.php | 36 ++++++++----------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/Symfony/Component/Routing/Matcher/Dumper/StaticPrefixCollection.php b/src/Symfony/Component/Routing/Matcher/Dumper/StaticPrefixCollection.php index cd9e6b4c3e7f3..030aeaed4139b 100644 --- a/src/Symfony/Component/Routing/Matcher/Dumper/StaticPrefixCollection.php +++ b/src/Symfony/Component/Routing/Matcher/Dumper/StaticPrefixCollection.php @@ -176,7 +176,7 @@ private function getCommonPrefix(string $prefix, string $anotherPrefix): array break; } $subPattern = substr($prefix, $i, $j - $i); - if ($prefix !== $anotherPrefix && !preg_match('/^\(\[[^\]]++\]\+\+\)$/', $subPattern) && !preg_match('{(? '{^(?' - .'|/abc([^/]++)/(?' - .'|1(?' - .'|(*:27)' - .'|0(?' - .'|(*:38)' - .'|0(*:46)' - .')' - .')' - .'|2(?' - .'|(*:59)' - .'|0(?' - .'|(*:70)' - .'|0(*:78)' - .')' - .')' + .'|/abc(?' + .'|([^/]++)/1(*:24)' + .'|([^/]++)/2(*:41)' + .'|([^/]++)/10(*:59)' + .'|([^/]++)/20(*:77)' + .'|([^/]++)/100(*:96)' + .'|([^/]++)/200(*:115)' .')' .')$}sD', ); @@ -53,12 +45,12 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { default: $routes = array( - 27 => array(array('_route' => 'r1'), array('foo'), null, null), - 38 => array(array('_route' => 'r10'), array('foo'), null, null), - 46 => array(array('_route' => 'r100'), array('foo'), null, null), - 59 => array(array('_route' => 'r2'), array('foo'), null, null), - 70 => array(array('_route' => 'r20'), array('foo'), null, null), - 78 => array(array('_route' => 'r200'), array('foo'), null, null), + 24 => array(array('_route' => 'r1'), array('foo'), null, null), + 41 => array(array('_route' => 'r2'), array('foo'), null, null), + 59 => array(array('_route' => 'r10'), array('foo'), null, null), + 77 => array(array('_route' => 'r20'), array('foo'), null, null), + 96 => array(array('_route' => 'r100'), array('foo'), null, null), + 115 => array(array('_route' => 'r200'), array('foo'), null, null), ); list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m]; @@ -84,7 +76,7 @@ public function match($rawPathinfo) return $ret; } - if (78 === $m) { + if (115 === $m) { break; } $regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m)); From 7c97846811420719bd225756a4d3dd94ea861797 Mon Sep 17 00:00:00 2001 From: Maxime Steinhausser Date: Mon, 4 Jun 2018 19:53:17 +0200 Subject: [PATCH 023/108] [FrameworkBundle][SecurityBundle] Remove no-longer necessary Bundle::registerCommands override --- src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php | 6 ------ src/Symfony/Bundle/SecurityBundle/SecurityBundle.php | 6 ------ 2 files changed, 12 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php index 70a83f2052d9f..e9143ba56d0e5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php +++ b/src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php @@ -27,7 +27,6 @@ use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TestServiceContainerRealRefPass; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\UnusedTagsPass; use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\WorkflowGuardListenerPass; -use Symfony\Component\Console\Application; use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass; use Symfony\Component\HttpKernel\DependencyInjection\ControllerArgumentValueResolverPass; use Symfony\Component\HttpKernel\DependencyInjection\LoggerPass; @@ -137,9 +136,4 @@ private function addCompilerPassIfExists(ContainerBuilder $container, $class, $t $container->addCompilerPass(new $class(), $type, $priority); } } - - public function registerCommands(Application $application) - { - // noop - } } diff --git a/src/Symfony/Bundle/SecurityBundle/SecurityBundle.php b/src/Symfony/Bundle/SecurityBundle/SecurityBundle.php index dd6dd829d7494..89d7a7f98e99b 100644 --- a/src/Symfony/Bundle/SecurityBundle/SecurityBundle.php +++ b/src/Symfony/Bundle/SecurityBundle/SecurityBundle.php @@ -13,7 +13,6 @@ use Symfony\Bundle\SecurityBundle\DependencyInjection\Compiler\RegisterCsrfTokenClearingLogoutHandlerPass; use Symfony\Bundle\SecurityBundle\DependencyInjection\Security\Factory\JsonLoginFactory; -use Symfony\Component\Console\Application; use Symfony\Component\HttpKernel\Bundle\Bundle; use Symfony\Component\DependencyInjection\Compiler\PassConfig; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -62,9 +61,4 @@ public function build(ContainerBuilder $container) $container->addCompilerPass(new AddSessionDomainConstraintPass(), PassConfig::TYPE_BEFORE_REMOVING); $container->addCompilerPass(new RegisterCsrfTokenClearingLogoutHandlerPass()); } - - public function registerCommands(Application $application) - { - // noop - } } From 44616d9bcca8afc932a65da96dfeba87fa0796f9 Mon Sep 17 00:00:00 2001 From: Arnaud Kleinpeter Date: Mon, 4 Jun 2018 15:03:54 +0200 Subject: [PATCH 024/108] [Router] regression when matching a route --- .../Routing/Tests/Matcher/UrlMatcherTest.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php b/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php index b3bfd78271bf3..1e13f0883e9db 100644 --- a/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php +++ b/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php @@ -245,6 +245,18 @@ public function testMatchRegression() } } + public function testMultipleParams() + { + $coll = new RouteCollection(); + $coll->add('foo1', new Route('/foo/{a}/{b}')); + $coll->add('foo2', new Route('/foo/{a}/test/test/{b}')); + $coll->add('foo3', new Route('/foo/{a}/{b}/{c}/{d}')); + + $route = $this->getUrlMatcher($coll)->match('/foo/test/test/test/bar')['_route']; + + $this->assertEquals('foo2', $route); + } + public function testDefaultRequirementForOptionalVariables() { $coll = new RouteCollection(); From af0699012ae02accb11b4b3a8d5b3fee477ceb46 Mon Sep 17 00:00:00 2001 From: Aleksey Prilipko Date: Sun, 20 May 2018 12:18:30 +1000 Subject: [PATCH 025/108] bug #27299 [Cache] memcache connect should not add duplicate entries on sequential calls --- .../Component/Cache/Tests/Simple/MemcachedCacheTest.php | 9 +++++++++ src/Symfony/Component/Cache/Traits/MemcachedTrait.php | 6 +++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php index c4af891af7ba7..b46d7e443dd20 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php @@ -45,6 +45,15 @@ public function createSimpleCache($defaultLifetime = 0) return new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); } + public function testCreatePersistentConnectionShouldNotDupServerList() + { + $instance = MemcachedCache::createConnection('memcached://'.getenv('MEMCACHED_HOST'), array('persistent_id' => 'persistent')); + $this->assertCount(1, $instance->getServerList()); + + $instance = MemcachedCache::createConnection('memcached://'.getenv('MEMCACHED_HOST'), array('persistent_id' => 'persistent')); + $this->assertCount(1, $instance->getServerList()); + } + public function testOptions() { $client = MemcachedCache::createConnection(array(), array( diff --git a/src/Symfony/Component/Cache/Traits/MemcachedTrait.php b/src/Symfony/Component/Cache/Traits/MemcachedTrait.php index 9b877efb080a9..9148573694cf6 100644 --- a/src/Symfony/Component/Cache/Traits/MemcachedTrait.php +++ b/src/Symfony/Component/Cache/Traits/MemcachedTrait.php @@ -169,12 +169,12 @@ public static function createConnection($servers, array $options = array()) } if ($oldServers !== $newServers) { - // before resetting, ensure $servers is valid - $client->addServers($servers); $client->resetServerList(); + $client->addServers($servers); } + } else { + $client->addServers($servers); } - $client->addServers($servers); if (null !== $username || null !== $password) { if (!method_exists($client, 'setSaslAuthData')) { From 0f3ba5a57d557ed6345cadc89f5f1b27e98fcc04 Mon Sep 17 00:00:00 2001 From: Greg ORIOL Date: Fri, 1 Jun 2018 01:32:42 +0200 Subject: [PATCH 026/108] [WebProfilerBundle] fixed getSession when no session has been set deprecation warnings --- .../WebProfilerBundle/Controller/ProfilerController.php | 8 ++++++-- .../Resources/views/Profiler/results.html.twig | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php b/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php index e132d30dd602d..a8263855cd37b 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php +++ b/src/Symfony/Bundle/WebProfilerBundle/Controller/ProfilerController.php @@ -180,7 +180,7 @@ public function searchBarAction(Request $request) $this->cspHandler->disableCsp(); } - if (null === $session = $request->getSession()) { + if (!$request->hasSession()) { $ip = $method = $statusCode = @@ -190,6 +190,8 @@ public function searchBarAction(Request $request) $limit = $token = null; } else { + $session = $request->getSession(); + $ip = $request->query->get('ip', $session->get('_profiler_search_ip')); $method = $request->query->get('method', $session->get('_profiler_search_method')); $statusCode = $request->query->get('status_code', $session->get('_profiler_search_status_code')); @@ -289,7 +291,9 @@ public function searchAction(Request $request) $limit = $request->query->get('limit'); $token = $request->query->get('token'); - if (null !== $session = $request->getSession()) { + if ($request->hasSession()) { + $session = $request->getSession(); + $session->set('_profiler_search_ip', $ip); $session->set('_profiler_search_method', $method); $session->set('_profiler_search_status_code', $statusCode); diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/results.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/results.html.twig index fb5c3aa6d10ca..7ddbf9c4f028e 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/results.html.twig +++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/results.html.twig @@ -1,7 +1,7 @@ {% extends '@WebProfiler/Profiler/layout.html.twig' %} {% macro profile_search_filter(request, result, property) %} - {%- if request.session is not null -%} + {%- if request.hasSession -%} {{ include('@WebProfiler/Icon/search.svg') }} {%- endif -%} {% endmacro %} From b3cdfc64b561ec3321cbc0a3b1321ca1e387be2f Mon Sep 17 00:00:00 2001 From: Roland Franssen Date: Fri, 1 Jun 2018 20:08:31 +0200 Subject: [PATCH 027/108] [DI] Ignore missing tree root nodes on validate --- .../Config/Definition/Builder/TreeBuilder.php | 3 +- .../TreeWithoutRootNodeException.php | 19 +++++++++++ .../Compiler/ValidateEnvPlaceholdersPass.php | 6 +++- .../ValidateEnvPlaceholdersPassTest.php | 34 +++++++++++++++++-- .../DependencyInjection/composer.json | 2 +- 5 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 src/Symfony/Component/Config/Definition/Exception/TreeWithoutRootNodeException.php diff --git a/src/Symfony/Component/Config/Definition/Builder/TreeBuilder.php b/src/Symfony/Component/Config/Definition/Builder/TreeBuilder.php index 6da510ec1c2dd..6b4323d42f519 100644 --- a/src/Symfony/Component/Config/Definition/Builder/TreeBuilder.php +++ b/src/Symfony/Component/Config/Definition/Builder/TreeBuilder.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Config\Definition\Builder; +use Symfony\Component\Config\Definition\Exception\TreeWithoutRootNodeException; use Symfony\Component\Config\Definition\NodeInterface; /** @@ -74,7 +75,7 @@ public function setPathSeparator(string $separator) private function assertTreeHasRootNode() { if (null === $this->root) { - throw new \RuntimeException('The configuration tree has no root node.'); + throw new TreeWithoutRootNodeException('The configuration tree has no root node.'); } } } diff --git a/src/Symfony/Component/Config/Definition/Exception/TreeWithoutRootNodeException.php b/src/Symfony/Component/Config/Definition/Exception/TreeWithoutRootNodeException.php new file mode 100644 index 0000000000000..67b0c4bb2e084 --- /dev/null +++ b/src/Symfony/Component/Config/Definition/Exception/TreeWithoutRootNodeException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Exception; + +/** + * @author Roland Franssen + */ +class TreeWithoutRootNodeException extends \RuntimeException +{ +} diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php index 1fe57f9db6cfb..4b13cf2b9420a 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php @@ -12,6 +12,7 @@ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\Config\Definition\BaseNode; +use Symfony\Component\Config\Definition\Exception\TreeWithoutRootNodeException; use Symfony\Component\Config\Definition\Processor; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\LogicException; @@ -77,7 +78,10 @@ public function process(ContainerBuilder $container) continue; } - $processor->processConfiguration($configuration, $config); + try { + $processor->processConfiguration($configuration, $config); + } catch (TreeWithoutRootNodeException $e) { + } } } finally { BaseNode::resetPlaceholders(); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php index bd554cd285901..571c070c60179 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php @@ -14,6 +14,7 @@ use PHPUnit\Framework\TestCase; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; +use Symfony\Component\Config\Definition\Exception\TreeWithoutRootNodeException; use Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass; use Symfony\Component\DependencyInjection\Compiler\RegisterEnvVarProcessorsPass; use Symfony\Component\DependencyInjection\Compiler\ValidateEnvPlaceholdersPass; @@ -222,6 +223,17 @@ public function testEnvWithVariableNode(): void $this->assertSame($expected, $container->resolveEnvPlaceholders($ext->getConfig())); } + public function testConfigurationWithoutRootNode(): void + { + $container = new ContainerBuilder(); + $container->registerExtension($ext = new EnvExtension(new EnvConfigurationWithoutRootNode())); + $container->loadFromExtension('env_extension'); + + $this->doProcess($container); + + $this->addToAssertionCount(1); + } + private function doProcess(ContainerBuilder $container): void { (new MergeExtensionConfigurationPass())->process($container); @@ -267,10 +279,24 @@ public function getConfigTreeBuilder() } } +class EnvConfigurationWithoutRootNode implements ConfigurationInterface +{ + public function getConfigTreeBuilder() + { + return new TreeBuilder(); + } +} + class EnvExtension extends Extension { + private $configuration; private $config; + public function __construct(ConfigurationInterface $configuration = null) + { + $this->configuration = $configuration ?? new EnvConfiguration(); + } + public function getAlias() { return 'env_extension'; @@ -278,12 +304,16 @@ public function getAlias() public function getConfiguration(array $config, ContainerBuilder $container) { - return new EnvConfiguration(); + return $this->configuration; } public function load(array $configs, ContainerBuilder $container) { - $this->config = $this->processConfiguration($this->getConfiguration($configs, $container), $configs); + try { + $this->config = $this->processConfiguration($this->getConfiguration($configs, $container), $configs); + } catch (TreeWithoutRootNodeException $e) { + $this->config = null; + } } public function getConfig() diff --git a/src/Symfony/Component/DependencyInjection/composer.json b/src/Symfony/Component/DependencyInjection/composer.json index 8230395645c7c..12758018f22da 100644 --- a/src/Symfony/Component/DependencyInjection/composer.json +++ b/src/Symfony/Component/DependencyInjection/composer.json @@ -32,7 +32,7 @@ "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them" }, "conflict": { - "symfony/config": "<4.1", + "symfony/config": "<4.1.1", "symfony/finder": "<3.4", "symfony/proxy-manager-bridge": "<3.4", "symfony/yaml": "<3.4" From 77b9f90a321a308d88148a3cc0ab06aa41d379d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Deruss=C3=A9?= Date: Wed, 23 May 2018 19:28:00 +0200 Subject: [PATCH 028/108] Remove released semaphore --- .../Component/Lock/Store/SemaphoreStore.php | 22 +++++++++------ .../Lock/Tests/Store/SemaphoreStoreTest.php | 28 +++++++++++++++++++ 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Component/Lock/Store/SemaphoreStore.php b/src/Symfony/Component/Lock/Store/SemaphoreStore.php index a6cc9ea8b9f1d..4e149e8deb81c 100644 --- a/src/Symfony/Component/Lock/Store/SemaphoreStore.php +++ b/src/Symfony/Component/Lock/Store/SemaphoreStore.php @@ -75,16 +75,20 @@ private function lock(Key $key, $blocking) return; } - $resource = sem_get(crc32($key)); + $keyId = crc32($key); + $resource = sem_get($keyId); - if (\PHP_VERSION_ID < 50601) { - if (!$blocking) { - throw new NotSupportedException(sprintf('The store "%s" does not supports non blocking locks.', get_class($this))); - } - - $acquired = sem_acquire($resource); + if (\PHP_VERSION_ID >= 50601) { + $acquired = @sem_acquire($resource, !$blocking); + } elseif (!$blocking) { + throw new NotSupportedException(sprintf('The store "%s" does not supports non blocking locks.', get_class($this))); } else { - $acquired = sem_acquire($resource, !$blocking); + $acquired = @sem_acquire($resource); + } + + while ($blocking && !$acquired) { + $resource = sem_get($keyId); + $acquired = @sem_acquire($resource); } if (!$acquired) { @@ -106,7 +110,7 @@ public function delete(Key $key) $resource = $key->getState(__CLASS__); - sem_release($resource); + sem_remove($resource); $key->removeState(__CLASS__); } diff --git a/src/Symfony/Component/Lock/Tests/Store/SemaphoreStoreTest.php b/src/Symfony/Component/Lock/Tests/Store/SemaphoreStoreTest.php index bb37ec1fe1a1b..23b90360bea77 100644 --- a/src/Symfony/Component/Lock/Tests/Store/SemaphoreStoreTest.php +++ b/src/Symfony/Component/Lock/Tests/Store/SemaphoreStoreTest.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Lock\Tests\Store; +use Symfony\Component\Lock\Key; use Symfony\Component\Lock\Store\SemaphoreStore; /** @@ -33,4 +34,31 @@ protected function getStore() return new SemaphoreStore(); } + + public function testResourceRemoval() + { + $initialCount = $this->getOpenedSemaphores(); + $store = new SemaphoreStore(); + $key = new Key(uniqid(__METHOD__, true)); + $store->waitAndSave($key); + + $this->assertGreaterThan($initialCount, $this->getOpenedSemaphores(), 'Semaphores should have been created'); + + $store->delete($key); + $this->assertEquals($initialCount, $this->getOpenedSemaphores(), 'All semaphores should be removed'); + } + + private function getOpenedSemaphores() + { + $lines = explode(PHP_EOL, trim(`ipcs -su`)); + if ('------ Semaphore Status --------' !== $lines[0]) { + throw new \Exception('Failed to extract list of opend semaphores. Expect a Semaphore status, got '.implode(PHP_EOL, $lines)); + } + list($key, $value) = explode(' = ', $lines[1]); + if ('used arrays' !== $key) { + throw new \Exception('Failed to extract list of opend semaphores. Expect a used arrays key, got '.implode(PHP_EOL, $lines)); + } + + return (int) $value; + } } From 67d4e6dd29d24093c9c81da104297c25f997cf08 Mon Sep 17 00:00:00 2001 From: Aleksey Prilipko Date: Wed, 30 May 2018 11:21:31 +1000 Subject: [PATCH 029/108] bug #27405 [Cache] TagAwareAdapter should not corrupt memcached connection in ascii mode --- .../Simple/MemcachedCacheTextModeTest.php | 25 +++++++++++++++++++ .../Component/Cache/Traits/MemcachedTrait.php | 23 ++++++++++++++--- 2 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php diff --git a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php new file mode 100644 index 0000000000000..43cadf9034846 --- /dev/null +++ b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Tests\Simple; + +use Symfony\Component\Cache\Adapter\AbstractAdapter; +use Symfony\Component\Cache\Simple\MemcachedCache; + +class MemcachedCacheTextModeTest extends MemcachedCacheTest +{ + public function createSimpleCache($defaultLifetime = 0) + { + $client = AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), array('binary_protocol' => false)); + + return new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); + } +} diff --git a/src/Symfony/Component/Cache/Traits/MemcachedTrait.php b/src/Symfony/Component/Cache/Traits/MemcachedTrait.php index 9b877efb080a9..9f861cf5d29b6 100644 --- a/src/Symfony/Component/Cache/Traits/MemcachedTrait.php +++ b/src/Symfony/Component/Cache/Traits/MemcachedTrait.php @@ -198,7 +198,12 @@ protected function doSave(array $values, $lifetime) $lifetime += time(); } - return $this->checkResultCode($this->getClient()->setMulti($values, $lifetime)); + $encodedValues = array(); + foreach ($values as $key => $value) { + $encodedValues[rawurlencode($key)] = $value; + } + + return $this->checkResultCode($this->getClient()->setMulti($encodedValues, $lifetime)); } /** @@ -208,7 +213,16 @@ protected function doFetch(array $ids) { $unserializeCallbackHandler = ini_set('unserialize_callback_func', __CLASS__.'::handleUnserializeCallback'); try { - return $this->checkResultCode($this->getClient()->getMulti($ids)); + $encodedIds = array_map('rawurlencode', $ids); + + $encodedResult = $this->checkResultCode($this->getClient()->getMulti($encodedIds)); + + $result = array(); + foreach ($encodedResult as $key => $value) { + $result[rawurldecode($key)] = $value; + } + + return $result; } catch (\Error $e) { throw new \ErrorException($e->getMessage(), $e->getCode(), E_ERROR, $e->getFile(), $e->getLine()); } finally { @@ -221,7 +235,7 @@ protected function doFetch(array $ids) */ protected function doHave($id) { - return false !== $this->getClient()->get($id) || $this->checkResultCode(\Memcached::RES_SUCCESS === $this->client->getResultCode()); + return false !== $this->getClient()->get(rawurlencode($id)) || $this->checkResultCode(\Memcached::RES_SUCCESS === $this->client->getResultCode()); } /** @@ -230,7 +244,8 @@ protected function doHave($id) protected function doDelete(array $ids) { $ok = true; - foreach ($this->checkResultCode($this->getClient()->deleteMulti($ids)) as $result) { + $encodedIds = array_map('rawurlencode', $ids); + foreach ($this->checkResultCode($this->getClient()->deleteMulti($encodedIds)) as $result) { if (\Memcached::RES_SUCCESS !== $result && \Memcached::RES_NOTFOUND !== $result) { $ok = false; } From 6a0b75fb9b0e84fe217a9b0d8f35c1aea46007da Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 5 Jun 2018 10:24:18 +0200 Subject: [PATCH 030/108] Remove mentions of "beta" in composer.json files --- src/Symfony/Component/Security/Csrf/composer.json | 2 +- src/Symfony/Component/Security/composer.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Security/Csrf/composer.json b/src/Symfony/Component/Security/Csrf/composer.json index 86bc9015c8fd9..7a42b37d35e78 100644 --- a/src/Symfony/Component/Security/Csrf/composer.json +++ b/src/Symfony/Component/Security/Csrf/composer.json @@ -25,7 +25,7 @@ "symfony/http-foundation": "^2.7.38|~3.3.13" }, "conflict": { - "symfony/http-foundation": "<2.7.38|~2.8,<2.8.31|~3.3,<3.3.13|~3.4,<3.4-beta5" + "symfony/http-foundation": "<2.7.38|~2.8,<2.8.31|~3.3,<3.3.13" }, "suggest": { "symfony/http-foundation": "For using the class SessionTokenStorage." diff --git a/src/Symfony/Component/Security/composer.json b/src/Symfony/Component/Security/composer.json index 1fb2494cb3619..3e3468feb8597 100644 --- a/src/Symfony/Component/Security/composer.json +++ b/src/Symfony/Component/Security/composer.json @@ -43,7 +43,7 @@ "symfony/ldap": "~2.8|~3.0.0" }, "conflict": { - "symfony/http-foundation": "~2.8,<2.8.31|~3.4,<3.4-beta5" + "symfony/http-foundation": "~2.8,<2.8.31" }, "suggest": { "symfony/form": "", From 6764d4e01272b922f6f3c9ab2e3dee2fd19acd43 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 5 Jun 2018 10:01:54 +0200 Subject: [PATCH 031/108] [FrameworkBundle] Fix test-container on kernel reboot, revert to returning the real container from Client::getContainer() --- src/Symfony/Bundle/FrameworkBundle/Client.php | 8 +- .../TestServiceContainerRealRefPass.php | 8 +- .../TestServiceContainerWeakRefPass.php | 4 +- .../FrameworkBundle/Resources/config/test.xml | 14 ++-- .../FrameworkBundle/Test/TestContainer.php | 81 ++++++++++++++----- .../Tests/Functional/ContainerDumpTest.php | 4 +- .../Tests/Functional/LogoutTest.php | 8 +- .../Bundle/SecurityBundle/composer.json | 2 +- 8 files changed, 82 insertions(+), 47 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Client.php b/src/Symfony/Bundle/FrameworkBundle/Client.php index a5f6a1500bfbf..bc76ce28f0cd1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Client.php +++ b/src/Symfony/Bundle/FrameworkBundle/Client.php @@ -30,15 +30,13 @@ class Client extends BaseClient private $hasPerformedRequest = false; private $profiler = false; private $reboot = true; - private $testContainerId; /** * {@inheritdoc} */ - public function __construct(KernelInterface $kernel, array $server = array(), History $history = null, CookieJar $cookieJar = null, string $testContainerId = null) + public function __construct(KernelInterface $kernel, array $server = array(), History $history = null, CookieJar $cookieJar = null) { parent::__construct($kernel, $server, $history, $cookieJar); - $this->testContainerId = $testContainerId; } /** @@ -48,9 +46,7 @@ public function __construct(KernelInterface $kernel, array $server = array(), Hi */ public function getContainer() { - $container = $this->kernel->getContainer(); - - return null !== $this->testContainerId ? $container->get($this->testContainerId) : $container; + return $this->kernel->getContainer(); } /** diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php index 19b36e3d2c843..a4eaa9fbe36e8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php @@ -22,15 +22,11 @@ class TestServiceContainerRealRefPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { - if (!$container->hasDefinition('test.service_container')) { + if (!$container->hasDefinition('test.private_services_locator')) { return; } - $testContainer = $container->getDefinition('test.service_container'); - $privateContainer = $testContainer->getArgument(2); - if ($privateContainer instanceof Reference) { - $privateContainer = $container->getDefinition((string) $privateContainer); - } + $privateContainer = $container->getDefinition('test.private_services_locator'); $definitions = $container->getDefinitions(); $privateServices = $privateContainer->getArgument(0); diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php index 51fe553e19b2b..060d234d38772 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php @@ -23,7 +23,7 @@ class TestServiceContainerWeakRefPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { - if (!$container->hasDefinition('test.service_container')) { + if (!$container->hasDefinition('test.private_services_locator')) { return; } @@ -50,7 +50,7 @@ public function process(ContainerBuilder $container) } if ($privateServices) { - $definitions[(string) $definitions['test.service_container']->getArgument(2)]->replaceArgument(0, $privateServices); + $definitions['test.private_services_locator']->replaceArgument(0, $privateServices); } } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/test.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/test.xml index f159208a41a28..09df99cfc086f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/test.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/test.xml @@ -16,7 +16,6 @@ %test.client.parameters% - test.service_container @@ -36,13 +35,12 @@ - - - - - - - + + test.private_services_locator + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Test/TestContainer.php b/src/Symfony/Bundle/FrameworkBundle/Test/TestContainer.php index 451faa89bd9e3..5b9c1eb51c23f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Test/TestContainer.php +++ b/src/Symfony/Bundle/FrameworkBundle/Test/TestContainer.php @@ -11,24 +11,23 @@ namespace Symfony\Bundle\FrameworkBundle\Test; -use Psr\Container\ContainerInterface as PsrContainerInterface; use Symfony\Component\DependencyInjection\Container; -use Symfony\Component\DependencyInjection\ContainerInterface as SymfonyContainerInterface; -use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; +use Symfony\Component\HttpKernel\KernelInterface; /** * @author Nicolas Grekas + * + * @internal */ class TestContainer extends Container { - private $publicContainer; - private $privateContainer; + private $kernel; + private $privateServicesLocatorId; - public function __construct(?ParameterBagInterface $parameterBag, SymfonyContainerInterface $publicContainer, PsrContainerInterface $privateContainer) + public function __construct(KernelInterface $kernel, string $privateServicesLocatorId) { - $this->parameterBag = $parameterBag ?? $publicContainer->getParameterBag(); - $this->publicContainer = $publicContainer; - $this->privateContainer = $privateContainer; + $this->kernel = $kernel; + $this->privateServicesLocatorId = $privateServicesLocatorId; } /** @@ -36,7 +35,7 @@ public function __construct(?ParameterBagInterface $parameterBag, SymfonyContain */ public function compile() { - $this->publicContainer->compile(); + $this->getPublicContainer()->compile(); } /** @@ -44,7 +43,39 @@ public function compile() */ public function isCompiled() { - return $this->publicContainer->isCompiled(); + return $this->getPublicContainer()->isCompiled(); + } + + /** + * {@inheritdoc} + */ + public function getParameterBag() + { + return $this->getPublicContainer()->getParameterBag(); + } + + /** + * {@inheritdoc} + */ + public function getParameter($name) + { + return $this->getPublicContainer()->getParameter($name); + } + + /** + * {@inheritdoc} + */ + public function hasParameter($name) + { + return $this->getPublicContainer()->hasParameter($name); + } + + /** + * {@inheritdoc} + */ + public function setParameter($name, $value) + { + $this->getPublicContainer()->setParameter($name, $value); } /** @@ -52,7 +83,7 @@ public function isCompiled() */ public function set($id, $service) { - $this->publicContainer->set($id, $service); + $this->getPublicContainer()->set($id, $service); } /** @@ -60,7 +91,7 @@ public function set($id, $service) */ public function has($id) { - return $this->publicContainer->has($id) || $this->privateContainer->has($id); + return $this->getPublicContainer()->has($id) || $this->getPrivateContainer()->has($id); } /** @@ -68,7 +99,7 @@ public function has($id) */ public function get($id, $invalidBehavior = /* self::EXCEPTION_ON_INVALID_REFERENCE */ 1) { - return $this->privateContainer->has($id) ? $this->privateContainer->get($id) : $this->publicContainer->get($id, $invalidBehavior); + return $this->getPrivateContainer()->has($id) ? $this->getPrivateContainer()->get($id) : $this->getPublicContainer()->get($id, $invalidBehavior); } /** @@ -76,7 +107,7 @@ public function get($id, $invalidBehavior = /* self::EXCEPTION_ON_INVALID_REFERE */ public function initialized($id) { - return $this->publicContainer->initialized($id); + return $this->getPublicContainer()->initialized($id); } /** @@ -84,7 +115,7 @@ public function initialized($id) */ public function reset() { - $this->publicContainer->reset(); + $this->getPublicContainer()->reset(); } /** @@ -92,7 +123,7 @@ public function reset() */ public function getServiceIds() { - return $this->publicContainer->getServiceIds(); + return $this->getPublicContainer()->getServiceIds(); } /** @@ -100,6 +131,20 @@ public function getServiceIds() */ public function getRemovedIds() { - return $this->publicContainer->getRemovedIds(); + return $this->getPublicContainer()->getRemovedIds(); + } + + private function getPublicContainer() + { + if (null === $container = $this->kernel->getContainer()) { + throw new \LogicException('Cannot access the container on a non-booted kernel. Did you forget to boot it?'); + } + + return $container; + } + + private function getPrivateContainer() + { + return $this->getPublicContainer()->get($this->privateServicesLocatorId); } } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ContainerDumpTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ContainerDumpTest.php index 423d673be2f96..1eff55d4801ad 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ContainerDumpTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Functional/ContainerDumpTest.php @@ -20,13 +20,13 @@ public function testContainerCompilationInDebug() { $client = $this->createClient(array('test_case' => 'ContainerDump', 'root_config' => 'config.yml')); - $this->assertTrue($client->getContainer()->has('serializer')); + $this->assertTrue(static::$container->has('serializer')); } public function testContainerCompilation() { $client = $this->createClient(array('test_case' => 'ContainerDump', 'root_config' => 'config.yml', 'debug' => false)); - $this->assertTrue($client->getContainer()->has('serializer')); + $this->assertTrue(static::$container->has('serializer')); } } diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/LogoutTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/LogoutTest.php index d3c3b77fd5d61..1c4d1a7e7f512 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/LogoutTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/LogoutTest.php @@ -35,18 +35,18 @@ public function testSessionLessRememberMeLogout() public function testCsrfTokensAreClearedOnLogout() { $client = $this->createClient(array('test_case' => 'LogoutWithoutSessionInvalidation', 'root_config' => 'config.yml')); - $client->getContainer()->get('security.csrf.token_storage')->setToken('foo', 'bar'); + static::$container->get('security.csrf.token_storage')->setToken('foo', 'bar'); $client->request('POST', '/login', array( '_username' => 'johannes', '_password' => 'test', )); - $this->assertTrue($client->getContainer()->get('security.csrf.token_storage')->hasToken('foo')); - $this->assertSame('bar', $client->getContainer()->get('security.csrf.token_storage')->getToken('foo')); + $this->assertTrue(static::$container->get('security.csrf.token_storage')->hasToken('foo')); + $this->assertSame('bar', static::$container->get('security.csrf.token_storage')->getToken('foo')); $client->request('GET', '/logout'); - $this->assertFalse($client->getContainer()->get('security.csrf.token_storage')->hasToken('foo')); + $this->assertFalse(static::$container->get('security.csrf.token_storage')->hasToken('foo')); } } diff --git a/src/Symfony/Bundle/SecurityBundle/composer.json b/src/Symfony/Bundle/SecurityBundle/composer.json index 31ecaeebeb4a3..e4d0e5ea2eedf 100644 --- a/src/Symfony/Bundle/SecurityBundle/composer.json +++ b/src/Symfony/Bundle/SecurityBundle/composer.json @@ -47,7 +47,7 @@ "symfony/security": "4.1.0-beta1|4.1.0-beta2", "symfony/var-dumper": "<3.4", "symfony/event-dispatcher": "<3.4", - "symfony/framework-bundle": "<=4.1-beta2", + "symfony/framework-bundle": "<4.1.1", "symfony/console": "<3.4" }, "autoload": { From 7f9780b5dfaf2df83990a4e95af9f4191f8ff50a Mon Sep 17 00:00:00 2001 From: Pascal Montoya Date: Wed, 6 Jun 2018 10:34:52 +0200 Subject: [PATCH 032/108] Pass previous exception to FatalErrorException --- .../Component/Debug/Exception/ClassNotFoundException.php | 3 +++ src/Symfony/Component/Debug/Exception/FatalErrorException.php | 4 ++-- .../Component/Debug/Exception/UndefinedFunctionException.php | 3 +++ .../Component/Debug/Exception/UndefinedMethodException.php | 3 +++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Debug/Exception/ClassNotFoundException.php b/src/Symfony/Component/Debug/Exception/ClassNotFoundException.php index b91bf46631bbb..de5c45644363b 100644 --- a/src/Symfony/Component/Debug/Exception/ClassNotFoundException.php +++ b/src/Symfony/Component/Debug/Exception/ClassNotFoundException.php @@ -26,6 +26,9 @@ public function __construct($message, \ErrorException $previous) $previous->getSeverity(), $previous->getFile(), $previous->getLine(), + null, + true, + null, $previous->getPrevious() ); $this->setTrace($previous->getTrace()); diff --git a/src/Symfony/Component/Debug/Exception/FatalErrorException.php b/src/Symfony/Component/Debug/Exception/FatalErrorException.php index db2fb43bbceb5..3fd7c45fdbf95 100644 --- a/src/Symfony/Component/Debug/Exception/FatalErrorException.php +++ b/src/Symfony/Component/Debug/Exception/FatalErrorException.php @@ -35,9 +35,9 @@ class FatalErrorException extends \ErrorException */ class FatalErrorException extends LegacyFatalErrorException { - public function __construct($message, $code, $severity, $filename, $lineno, $traceOffset = null, $traceArgs = true, array $trace = null) + public function __construct($message, $code, $severity, $filename, $lineno, $traceOffset = null, $traceArgs = true, array $trace = null, $previous = null) { - parent::__construct($message, $code, $severity, $filename, $lineno); + parent::__construct($message, $code, $severity, $filename, $lineno, $previous); if (null !== $trace) { if (!$traceArgs) { diff --git a/src/Symfony/Component/Debug/Exception/UndefinedFunctionException.php b/src/Symfony/Component/Debug/Exception/UndefinedFunctionException.php index a66ae2a3879c9..8f5f454e55d99 100644 --- a/src/Symfony/Component/Debug/Exception/UndefinedFunctionException.php +++ b/src/Symfony/Component/Debug/Exception/UndefinedFunctionException.php @@ -26,6 +26,9 @@ public function __construct($message, \ErrorException $previous) $previous->getSeverity(), $previous->getFile(), $previous->getLine(), + null, + true, + null, $previous->getPrevious() ); $this->setTrace($previous->getTrace()); diff --git a/src/Symfony/Component/Debug/Exception/UndefinedMethodException.php b/src/Symfony/Component/Debug/Exception/UndefinedMethodException.php index 350dc3187f475..f7e340baf4dc6 100644 --- a/src/Symfony/Component/Debug/Exception/UndefinedMethodException.php +++ b/src/Symfony/Component/Debug/Exception/UndefinedMethodException.php @@ -26,6 +26,9 @@ public function __construct($message, \ErrorException $previous) $previous->getSeverity(), $previous->getFile(), $previous->getLine(), + null, + true, + null, $previous->getPrevious() ); $this->setTrace($previous->getTrace()); From c6acad719dfb93fe7785838ada7640cc51765979 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 6 Jun 2018 11:42:07 +0200 Subject: [PATCH 033/108] Revert "bug #26138 [HttpKernel] Catch HttpExceptions when templating is not installed (cilefen)" This reverts commit b213c5a758bc8b02375bd388b52b351c7e862f6a, reversing changes made to 61af0e3a25fbb2d169999a5b550c1f1801f1c0de. --- .../FrameworkBundle/Resources/config/web.xml | 10 ---------- .../EventListener/ExceptionListener.php | 16 +++------------- .../EventListener/ExceptionListenerTest.php | 17 ----------------- 3 files changed, 3 insertions(+), 40 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml index f6dd2bb9df630..0622c4196c104 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/web.xml @@ -67,16 +67,6 @@ - - - - null - - %kernel.debug% - %kernel.charset% - %debug.file_link_format% - - diff --git a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php index 4d8ad1e7e5971..f18e42c7d3693 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php @@ -12,11 +12,9 @@ namespace Symfony\Component\HttpKernel\EventListener; use Psr\Log\LoggerInterface; -use Symfony\Component\Debug\ExceptionHandler; use Symfony\Component\Debug\Exception\FlattenException; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Event\FilterResponseEvent; use Symfony\Component\HttpKernel\Log\DebugLoggerInterface; use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent; @@ -35,16 +33,12 @@ class ExceptionListener implements EventSubscriberInterface protected $controller; protected $logger; protected $debug; - private $charset; - private $fileLinkFormat; - public function __construct($controller, LoggerInterface $logger = null, $debug = false, $charset = null, $fileLinkFormat = null) + public function __construct($controller, LoggerInterface $logger = null, $debug = false) { $this->controller = $controller; $this->logger = $logger; $this->debug = $debug; - $this->charset = $charset; - $this->fileLinkFormat = $fileLinkFormat; } public function onKernelException(GetResponseForExceptionEvent $event) @@ -123,12 +117,8 @@ protected function logException(\Exception $exception, $message) protected function duplicateRequest(\Exception $exception, Request $request) { $attributes = array( - 'exception' => $exception = FlattenException::create($exception), - '_controller' => $this->controller ?: function () use ($exception) { - $handler = new ExceptionHandler($this->debug, $this->charset, $this->fileLinkFormat); - - return new Response($handler->getHtml($exception), $exception->getStatusCode(), $exception->getHeaders()); - }, + '_controller' => $this->controller, + 'exception' => FlattenException::create($exception), 'logger' => $this->logger instanceof DebugLoggerInterface ? $this->logger : null, ); $request = $request->duplicate(null, null, $attributes); diff --git a/src/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php b/src/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php index b607bf900ae91..3cb0b298bb07a 100644 --- a/src/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/EventListener/ExceptionListenerTest.php @@ -151,23 +151,6 @@ public function testCSPHeaderIsRemoved() $this->assertFalse($response->headers->has('content-security-policy'), 'CSP header has been removed'); $this->assertFalse($dispatcher->hasListeners(KernelEvents::RESPONSE), 'CSP removal listener has been removed'); } - - public function testNullController() - { - $listener = new ExceptionListener(null); - $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock(); - $kernel->expects($this->once())->method('handle')->will($this->returnCallback(function (Request $request) { - $controller = $request->attributes->get('_controller'); - - return $controller(); - })); - $request = Request::create('/'); - $event = new GetResponseForExceptionEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, new \Exception('foo')); - - $listener->onKernelException($event); - - $this->assertContains('Whoops, looks like something went wrong.', $event->getResponse()->getContent()); - } } class TestLogger extends Logger implements DebugLoggerInterface From 725d774a165dcb71be5535d014097bae1a295e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan=20Kochen?= Date: Thu, 7 Jun 2018 10:48:34 +0200 Subject: [PATCH 034/108] Fix security-core cross-dependencies, fixes #27507 --- src/Symfony/Bundle/FrameworkBundle/composer.json | 2 +- src/Symfony/Component/Security/Csrf/composer.json | 2 +- src/Symfony/Component/Security/Guard/composer.json | 2 +- src/Symfony/Component/Security/Http/composer.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index 06bd65eae4746..7742d5ca58efb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -29,7 +29,7 @@ "symfony/polyfill-mbstring": "~1.0", "symfony/filesystem": "~2.3|~3.0.0", "symfony/routing": "^2.8.17", - "symfony/security-core": "~2.6.13|~2.7.9|~2.8|~3.0.0", + "symfony/security-core": "^2.8.41|^3.3.17", "symfony/security-csrf": "^2.8.31|^3.3.13", "symfony/stopwatch": "~2.3|~3.0.0", "symfony/templating": "~2.7|~3.0.0", diff --git a/src/Symfony/Component/Security/Csrf/composer.json b/src/Symfony/Component/Security/Csrf/composer.json index 7a42b37d35e78..a015c5299118a 100644 --- a/src/Symfony/Component/Security/Csrf/composer.json +++ b/src/Symfony/Component/Security/Csrf/composer.json @@ -19,7 +19,7 @@ "php": ">=5.3.9", "symfony/polyfill-php56": "~1.0", "symfony/polyfill-php70": "~1.0", - "symfony/security-core": "~2.4|~3.0.0" + "symfony/security-core": "^2.8.41|^3.3.17" }, "require-dev": { "symfony/http-foundation": "^2.7.38|~3.3.13" diff --git a/src/Symfony/Component/Security/Guard/composer.json b/src/Symfony/Component/Security/Guard/composer.json index 35c7456638ea8..5f627c1ae07b8 100644 --- a/src/Symfony/Component/Security/Guard/composer.json +++ b/src/Symfony/Component/Security/Guard/composer.json @@ -17,7 +17,7 @@ ], "require": { "php": ">=5.3.9", - "symfony/security-core": "~2.8|~3.0.0", + "symfony/security-core": "^2.8.41|^3.3.17", "symfony/security-http": "^2.8.31|^3.3.13" }, "require-dev": { diff --git a/src/Symfony/Component/Security/Http/composer.json b/src/Symfony/Component/Security/Http/composer.json index c3e4da18b5b83..925c3da0eab7a 100644 --- a/src/Symfony/Component/Security/Http/composer.json +++ b/src/Symfony/Component/Security/Http/composer.json @@ -17,7 +17,7 @@ ], "require": { "php": ">=5.3.9", - "symfony/security-core": "^2.8.6", + "symfony/security-core": "^2.8.41", "symfony/event-dispatcher": "~2.1|~3.0.0", "symfony/http-foundation": "~2.4|~3.0.0", "symfony/http-kernel": "~2.4|~3.0.0", From 974991f8c69e54cf46a43f4d49deb2cf6d69f3fe Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 7 Jun 2018 22:45:56 +0200 Subject: [PATCH 035/108] [FrameworkBundle] remove dead code in CachePoolClearerPass --- .../Compiler/CachePoolClearerPass.php | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolClearerPass.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolClearerPass.php index 094712ded69d3..bd6908b9c4507 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolClearerPass.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/CachePoolClearerPass.php @@ -11,7 +11,6 @@ namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler; -use Symfony\Component\Cache\Adapter\AbstractAdapter; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Reference; @@ -38,22 +37,5 @@ public function process(ContainerBuilder $container) } $clearer->replaceArgument(0, $pools); } - - if (!$container->has('cache.annotations')) { - return; - } - $factory = array(AbstractAdapter::class, 'createSystemCache'); - $annotationsPool = $container->findDefinition('cache.annotations'); - if ($factory !== $annotationsPool->getFactory() || 4 !== count($annotationsPool->getArguments())) { - return; - } - if ($container->has('monolog.logger.cache')) { - $annotationsPool->addArgument(new Reference('monolog.logger.cache')); - } elseif ($container->has('cache.system')) { - $systemPool = $container->findDefinition('cache.system'); - if ($factory === $systemPool->getFactory() && 5 <= count($systemArgs = $systemPool->getArguments())) { - $annotationsPool->addArgument($systemArgs[4]); - } - } } } From a74ee8d594eca15d5c1ebe9f7822b98410e50086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarmo=20Lepp=C3=A4nen?= Date: Thu, 7 Jun 2018 20:53:17 +0300 Subject: [PATCH 036/108] Update Finder.php Corrected return type which causes following error with (psalm)[https://getpsalm.org/] ``` ERROR: PossiblyInvalidArgument - src/Command/Utils/CheckVendorDependencies.php:170:62 - Argument 1 of iterator_to_array expects Traversable, possibly different type array|Iterator provided $directories = array_map($closure, iterator_to_array($finder->getIterator())); ``` --- src/Symfony/Component/Finder/Finder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Finder/Finder.php b/src/Symfony/Component/Finder/Finder.php index 0c039ae6666d0..f20a621ee9bef 100644 --- a/src/Symfony/Component/Finder/Finder.php +++ b/src/Symfony/Component/Finder/Finder.php @@ -668,7 +668,7 @@ public function in($dirs) * * This method implements the IteratorAggregate interface. * - * @return \Iterator|SplFileInfo[] An iterator + * @return \Iterator|\SplFileInfo[] An iterator * * @throws \LogicException if the in() method has not been called */ From 8fd4b441c4f5f0e4309d68d2a5e673bd68560764 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Fri, 8 Jun 2018 09:55:24 +0200 Subject: [PATCH 037/108] revert #27545 The SplFileInfo class indeed does exist in the Symfony\Component\Finder namespace. --- src/Symfony/Component/Finder/Finder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Finder/Finder.php b/src/Symfony/Component/Finder/Finder.php index f20a621ee9bef..0c039ae6666d0 100644 --- a/src/Symfony/Component/Finder/Finder.php +++ b/src/Symfony/Component/Finder/Finder.php @@ -668,7 +668,7 @@ public function in($dirs) * * This method implements the IteratorAggregate interface. * - * @return \Iterator|\SplFileInfo[] An iterator + * @return \Iterator|SplFileInfo[] An iterator * * @throws \LogicException if the in() method has not been called */ From 465b15caa8e7023c4d18f3869c63c8e9d5d30796 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 5 Jun 2018 21:18:46 +0200 Subject: [PATCH 038/108] [Routing] fix matching host patterns, utf8 prefixes and non-capturing groups --- .../Matcher/Dumper/PhpMatcherDumper.php | 7 +- .../Matcher/Dumper/StaticPrefixCollection.php | 16 +- .../Component/Routing/RouteCompiler.php | 2 +- .../Tests/Fixtures/dumper/url_matcher1.php | 96 +- .../Tests/Fixtures/dumper/url_matcher10.php | 2006 ++++++++--------- .../Tests/Fixtures/dumper/url_matcher12.php | 36 +- .../Tests/Fixtures/dumper/url_matcher13.php | 10 +- .../Tests/Fixtures/dumper/url_matcher2.php | 96 +- .../Tests/Fixtures/dumper/url_matcher8.php | 12 +- .../Routing/Tests/Matcher/UrlMatcherTest.php | 37 + .../Routing/Tests/RouteCompilerTest.php | 1 + 11 files changed, 1185 insertions(+), 1134 deletions(-) diff --git a/src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php b/src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php index 0a79379160256..adb2b0a1c0148 100644 --- a/src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php +++ b/src/Symfony/Component/Routing/Matcher/Dumper/PhpMatcherDumper.php @@ -376,10 +376,10 @@ private function compileDynamicRoutes(RouteCollection $collection, bool $matchHo if ($hostRegex) { preg_match('#^.\^(.*)\$.[a-zA-Z]*$#', $hostRegex, $rx); $state->vars = array(); - $hostRegex = '(?i:'.preg_replace_callback('#\?P<([^>]++)>#', $state->getVars, $rx[1]).')'; + $hostRegex = '(?i:'.preg_replace_callback('#\?P<([^>]++)>#', $state->getVars, $rx[1]).')\.'; $state->hostVars = $state->vars; } else { - $hostRegex = '[^/]*+'; + $hostRegex = '(?:(?:[^.]*+\.)++)'; $state->hostVars = array(); } $state->mark += strlen($rx = ($prev ? ')' : '')."|{$hostRegex}(?"); @@ -406,6 +406,7 @@ private function compileDynamicRoutes(RouteCollection $collection, bool $matchHo $rx = ")$}{$modifiers}"; $code .= "\n .'{$rx}',"; $state->regex .= $rx; + $state->markTail = 0; // if the regex is too large, throw a signaling exception to recompute with smaller chunk size set_error_handler(function ($type, $message) { throw 0 === strpos($message, $this->signalingException->getMessage()) ? $this->signalingException : new \ErrorException($message); }); @@ -427,7 +428,7 @@ private function compileDynamicRoutes(RouteCollection $collection, bool $matchHo EOF; } - $matchedPathinfo = $matchHost ? '$host.$pathinfo' : '$pathinfo'; + $matchedPathinfo = $matchHost ? '$host.\'.\'.$pathinfo' : '$pathinfo'; unset($state->getVars); return <<getCommonPrefix($prefix, $prefix); - } + list($prefix, $staticPrefix) = $this->getCommonPrefix($prefix, $prefix); for ($i = \count($this->items) - 1; 0 <= $i; --$i) { $item = $this->items[$i]; @@ -102,7 +100,7 @@ public function addRoute(string $prefix, $route, string $staticPrefix = null) if ($item instanceof self && $this->prefixes[$i] === $commonPrefix) { // the new route is a child of a previous one, let's nest it - $item->addRoute($prefix, $route, $staticPrefix); + $item->addRoute($prefix, $route); } else { // the new route and a previous one have a common prefix, let's merge them $child = new self($commonPrefix); @@ -176,7 +174,7 @@ private function getCommonPrefix(string $prefix, string $anotherPrefix): array break; } $subPattern = substr($prefix, $i, $j - $i); - if ($prefix !== $anotherPrefix && !preg_match('{(?> 6) && preg_match('//u', $prefix.' '.$anotherPrefix)) { + do { + // Prevent cutting in the middle of an UTF-8 characters + --$i; + } while (0b10 === (\ord($prefix[$i]) >> 6)); + } return array(substr($prefix, 0, $i), substr($prefix, 0, $staticLength ?? $i)); } diff --git a/src/Symfony/Component/Routing/RouteCompiler.php b/src/Symfony/Component/Routing/RouteCompiler.php index 7a89edd4897df..91b4a297cc179 100644 --- a/src/Symfony/Component/Routing/RouteCompiler.php +++ b/src/Symfony/Component/Routing/RouteCompiler.php @@ -321,7 +321,7 @@ private static function transformCapturingGroupsToNonCapturings(string $regexp): continue; } $regexp = substr_replace($regexp, '?:', $i, 0); - $i += 2; + ++$i; } return $regexp; diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php index 615a3cba3090a..b39bc7f2bae0a 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher1.php @@ -79,50 +79,50 @@ public function match($rawPathinfo) return $ret; } - $matchedPathinfo = $host.$pathinfo; + $matchedPathinfo = $host.'.'.$pathinfo; $regexList = array( 0 => '{^(?' - .'|[^/]*+(?' - .'|/foo/(baz|symfony)(*:34)' + .'|(?:(?:[^.]*+\\.)++)(?' + .'|/foo/(baz|symfony)(*:46)' .'|/bar(?' - .'|/([^/]++)(*:57)' - .'|head/([^/]++)(*:77)' + .'|/([^/]++)(*:69)' + .'|head/([^/]++)(*:89)' .')' .'|/test/([^/]++)/(?' - .'|(*:103)' + .'|(*:115)' .')' - .'|/([\']+)(*:119)' + .'|/([\']+)(*:131)' .'|/a/(?' .'|b\'b/([^/]++)(?' - .'|(*:148)' - .'|(*:156)' + .'|(*:160)' + .'|(*:168)' .')' - .'|(.*)(*:169)' + .'|(.*)(*:181)' .'|b\'b/([^/]++)(?' - .'|(*:192)' - .'|(*:200)' + .'|(*:204)' + .'|(*:212)' .')' .')' - .'|/multi/hello(?:/([^/]++))?(*:236)' + .'|/multi/hello(?:/([^/]++))?(*:248)' .'|/([^/]++)/b/([^/]++)(?' - .'|(*:267)' - .'|(*:275)' + .'|(*:279)' + .'|(*:287)' .')' - .'|/aba/([^/]++)(*:297)' - .')|(?i:([^\\.]++)\\.example\\.com)(?' + .'|/aba/([^/]++)(*:309)' + .')|(?i:([^\\.]++)\\.example\\.com)\\.(?' .'|/route1(?' - .'|3/([^/]++)(*:357)' - .'|4/([^/]++)(*:375)' + .'|3/([^/]++)(*:371)' + .'|4/([^/]++)(*:389)' .')' - .')|(?i:c\\.example\\.com)(?' - .'|/route15/([^/]++)(*:425)' - .')|[^/]*+(?' - .'|/route16/([^/]++)(*:460)' + .')|(?i:c\\.example\\.com)\\.(?' + .'|/route15/([^/]++)(*:441)' + .')|(?:(?:[^.]*+\\.)++)(?' + .'|/route16/([^/]++)(*:488)' .'|/a/(?' - .'|a\\.\\.\\.(*:481)' + .'|a\\.\\.\\.(*:509)' .'|b/(?' - .'|([^/]++)(*:502)' - .'|c/([^/]++)(*:520)' + .'|([^/]++)(*:530)' + .'|c/([^/]++)(*:548)' .')' .')' .')' @@ -132,7 +132,7 @@ public function match($rawPathinfo) foreach ($regexList as $offset => $regex) { while (preg_match($regex, $matchedPathinfo, $matches)) { switch ($m = (int) $matches['MARK']) { - case 103: + case 115: $matches = array('foo' => $matches[1] ?? null); // baz4 @@ -159,7 +159,7 @@ public function match($rawPathinfo) not_bazbaz6: break; - case 148: + case 160: $matches = array('foo' => $matches[1] ?? null); // foo1 @@ -173,14 +173,14 @@ public function match($rawPathinfo) not_foo1: break; - case 192: + case 204: $matches = array('foo1' => $matches[1] ?? null); // foo2 return $this->mergeDefaults(array('_route' => 'foo2') + $matches, array()); break; - case 267: + case 279: $matches = array('_locale' => $matches[1] ?? null, 'foo' => $matches[2] ?? null); // foo3 @@ -189,23 +189,23 @@ public function match($rawPathinfo) break; default: $routes = array( - 34 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null), - 57 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null), - 77 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null), - 119 => array(array('_route' => 'quoter'), array('quoter'), null, null), - 156 => array(array('_route' => 'bar1'), array('bar'), null, null), - 169 => array(array('_route' => 'overridden'), array('var'), null, null), - 200 => array(array('_route' => 'bar2'), array('bar1'), null, null), - 236 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null), - 275 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null), - 297 => array(array('_route' => 'foo4'), array('foo'), null, null), - 357 => array(array('_route' => 'route13'), array('var1', 'name'), null, null), - 375 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null), - 425 => array(array('_route' => 'route15'), array('name'), null, null), - 460 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null), - 481 => array(array('_route' => 'a'), array(), null, null), - 502 => array(array('_route' => 'b'), array('var'), null, null), - 520 => array(array('_route' => 'c'), array('var'), null, null), + 46 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null), + 69 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null), + 89 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null), + 131 => array(array('_route' => 'quoter'), array('quoter'), null, null), + 168 => array(array('_route' => 'bar1'), array('bar'), null, null), + 181 => array(array('_route' => 'overridden'), array('var'), null, null), + 212 => array(array('_route' => 'bar2'), array('bar1'), null, null), + 248 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null), + 287 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null), + 309 => array(array('_route' => 'foo4'), array('foo'), null, null), + 371 => array(array('_route' => 'route13'), array('var1', 'name'), null, null), + 389 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null), + 441 => array(array('_route' => 'route15'), array('name'), null, null), + 488 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null), + 509 => array(array('_route' => 'a'), array(), null, null), + 530 => array(array('_route' => 'b'), array('var'), null, null), + 548 => array(array('_route' => 'c'), array('var'), null, null), ); list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m]; @@ -231,7 +231,7 @@ public function match($rawPathinfo) return $ret; } - if (520 === $m) { + if (548 === $m) { break; } $regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m)); diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher10.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher10.php index e976cd73f027c..81ded3417cdd3 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher10.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher10.php @@ -909,877 +909,877 @@ public function match($rawPathinfo) .')$}sD', 24786 => '{^(?' .'|/5(?' - .'|b69b9/([^/]++)/([^/]++)/([^/]++)/5b69b9(*:24845)' + .'|b69b9/([^/]++)/([^/]++)/([^/]++)/5b69b9(*:24837)' .'|9(?' - .'|b90e/([^/]++)/([^/]++)/([^/]++)/59b90e(*:24897)' - .'|c330/([^/]++)/([^/]++)/([^/]++)/59c330(*:24945)' + .'|b90e/([^/]++)/([^/]++)/([^/]++)/59b90e(*:24889)' + .'|c330/([^/]++)/([^/]++)/([^/]++)/59c330(*:24937)' .')' .'|3(?' - .'|fde9/([^/]++)/([^/]++)/([^/]++)/53fde9(*:24998)' - .'|e3a7/([^/]++)/([^/]++)/([^/]++)/53e3a7(*:25046)' + .'|fde9/([^/]++)/([^/]++)/([^/]++)/53fde9(*:24990)' + .'|e3a7/([^/]++)/([^/]++)/([^/]++)/53e3a7(*:25038)' .')' .'|e(?' - .'|a164/([^/]++)/([^/]++)/([^/]++)/5ea164(*:25099)' - .'|3881/([^/]++)/([^/]++)/([^/]++)/5e3881(*:25147)' - .'|9f92/([^/]++)/([^/]++)/([^/]++)/5e9f92(*:25195)' - .'|c91a/([^/]++)/([^/]++)/([^/]++)/5ec91a(*:25243)' + .'|a164/([^/]++)/([^/]++)/([^/]++)/5ea164(*:25091)' + .'|3881/([^/]++)/([^/]++)/([^/]++)/5e3881(*:25139)' + .'|9f92/([^/]++)/([^/]++)/([^/]++)/5e9f92(*:25187)' + .'|c91a/([^/]++)/([^/]++)/([^/]++)/5ec91a(*:25235)' .')' .'|7(?' - .'|3703/([^/]++)/([^/]++)/([^/]++)/573703(*:25296)' - .'|51ec/([^/]++)/([^/]++)/([^/]++)/5751ec(*:25344)' - .'|05e1/([^/]++)/([^/]++)/([^/]++)/5705e1(*:25392)' + .'|3703/([^/]++)/([^/]++)/([^/]++)/573703(*:25288)' + .'|51ec/([^/]++)/([^/]++)/([^/]++)/5751ec(*:25336)' + .'|05e1/([^/]++)/([^/]++)/([^/]++)/5705e1(*:25384)' .')' .'|8(?' - .'|ae74/([^/]++)/([^/]++)/([^/]++)/58ae74(*:25445)' - .'|d4d1/([^/]++)/([^/]++)/([^/]++)/58d4d1(*:25493)' - .'|07a6/([^/]++)/([^/]++)/([^/]++)/5807a6(*:25541)' - .'|e4d4/([^/]++)/([^/]++)/([^/]++)/58e4d4(*:25589)' + .'|ae74/([^/]++)/([^/]++)/([^/]++)/58ae74(*:25437)' + .'|d4d1/([^/]++)/([^/]++)/([^/]++)/58d4d1(*:25485)' + .'|07a6/([^/]++)/([^/]++)/([^/]++)/5807a6(*:25533)' + .'|e4d4/([^/]++)/([^/]++)/([^/]++)/58e4d4(*:25581)' .')' .'|d(?' - .'|44ee/([^/]++)/([^/]++)/([^/]++)/5d44ee(*:25642)' - .'|d9db/([^/]++)/([^/]++)/([^/]++)/5dd9db(*:25690)' + .'|44ee/([^/]++)/([^/]++)/([^/]++)/5d44ee(*:25634)' + .'|d9db/([^/]++)/([^/]++)/([^/]++)/5dd9db(*:25682)' .')' .'|5(?' - .'|b37c/([^/]++)/([^/]++)/([^/]++)/55b37c(*:25743)' - .'|743c/([^/]++)/([^/]++)/([^/]++)/55743c(*:25791)' - .'|6f39/([^/]++)/([^/]++)/([^/]++)/556f39(*:25839)' + .'|b37c/([^/]++)/([^/]++)/([^/]++)/55b37c(*:25735)' + .'|743c/([^/]++)/([^/]++)/([^/]++)/55743c(*:25783)' + .'|6f39/([^/]++)/([^/]++)/([^/]++)/556f39(*:25831)' .')' .'|c(?' - .'|0492/([^/]++)/([^/]++)/([^/]++)/5c0492(*:25892)' - .'|572e/([^/]++)/([^/]++)/([^/]++)/5c572e(*:25940)' - .'|9362/([^/]++)/([^/]++)/([^/]++)/5c9362(*:25988)' + .'|0492/([^/]++)/([^/]++)/([^/]++)/5c0492(*:25884)' + .'|572e/([^/]++)/([^/]++)/([^/]++)/5c572e(*:25932)' + .'|9362/([^/]++)/([^/]++)/([^/]++)/5c9362(*:25980)' .')' .'|4(?' - .'|8731/([^/]++)/([^/]++)/([^/]++)/548731(*:26041)' - .'|a367/([^/]++)/([^/]++)/([^/]++)/54a367(*:26089)' + .'|8731/([^/]++)/([^/]++)/([^/]++)/548731(*:26033)' + .'|a367/([^/]++)/([^/]++)/([^/]++)/54a367(*:26081)' .')' .'|0(?' - .'|0e75/([^/]++)/([^/]++)/([^/]++)/500e75(*:26142)' - .'|c3d7/([^/]++)/([^/]++)/([^/]++)/50c3d7(*:26190)' + .'|0e75/([^/]++)/([^/]++)/([^/]++)/500e75(*:26134)' + .'|c3d7/([^/]++)/([^/]++)/([^/]++)/50c3d7(*:26182)' .')' .'|f(?' - .'|2c22/([^/]++)/([^/]++)/([^/]++)/5f2c22(*:26243)' - .'|0f5e/([^/]++)/([^/]++)/([^/]++)/5f0f5e(*:26291)' + .'|2c22/([^/]++)/([^/]++)/([^/]++)/5f2c22(*:26235)' + .'|0f5e/([^/]++)/([^/]++)/([^/]++)/5f0f5e(*:26283)' .')' - .'|1ef18/([^/]++)/([^/]++)/([^/]++)/51ef18(*:26341)' + .'|1ef18/([^/]++)/([^/]++)/([^/]++)/51ef18(*:26333)' .')' .'|/b(?' .'|5(?' - .'|b41f/([^/]++)/([^/]++)/([^/]++)/b5b41f(*:26399)' - .'|dc4e/([^/]++)/([^/]++)/([^/]++)/b5dc4e(*:26447)' - .'|6a18/([^/]++)/([^/]++)/([^/]++)/b56a18(*:26495)' - .'|5ec2/([^/]++)/([^/]++)/([^/]++)/b55ec2(*:26543)' + .'|b41f/([^/]++)/([^/]++)/([^/]++)/b5b41f(*:26391)' + .'|dc4e/([^/]++)/([^/]++)/([^/]++)/b5dc4e(*:26439)' + .'|6a18/([^/]++)/([^/]++)/([^/]++)/b56a18(*:26487)' + .'|5ec2/([^/]++)/([^/]++)/([^/]++)/b55ec2(*:26535)' .')' - .'|337e8/([^/]++)/([^/]++)/([^/]++)/b337e8(*:26593)' + .'|337e8/([^/]++)/([^/]++)/([^/]++)/b337e8(*:26585)' .'|a(?' - .'|2fd3/([^/]++)/([^/]++)/([^/]++)/ba2fd3(*:26645)' - .'|3866/([^/]++)/([^/]++)/([^/]++)/ba3866(*:26693)' + .'|2fd3/([^/]++)/([^/]++)/([^/]++)/ba2fd3(*:26637)' + .'|3866/([^/]++)/([^/]++)/([^/]++)/ba3866(*:26685)' .')' .'|2(?' - .'|eeb7/([^/]++)/([^/]++)/([^/]++)/b2eeb7(*:26746)' - .'|f627/([^/]++)/([^/]++)/([^/]++)/b2f627(*:26794)' + .'|eeb7/([^/]++)/([^/]++)/([^/]++)/b2eeb7(*:26738)' + .'|f627/([^/]++)/([^/]++)/([^/]++)/b2f627(*:26786)' .')' .'|7(?' - .'|3dfe/([^/]++)/([^/]++)/([^/]++)/b73dfe(*:26847)' - .'|bb35/([^/]++)/([^/]++)/([^/]++)/b7bb35(*:26895)' - .'|ee6f/([^/]++)/([^/]++)/([^/]++)/b7ee6f(*:26943)' - .'|892f/([^/]++)/([^/]++)/([^/]++)/b7892f(*:26991)' - .'|0683/([^/]++)/([^/]++)/([^/]++)/b70683(*:27039)' + .'|3dfe/([^/]++)/([^/]++)/([^/]++)/b73dfe(*:26839)' + .'|bb35/([^/]++)/([^/]++)/([^/]++)/b7bb35(*:26887)' + .'|ee6f/([^/]++)/([^/]++)/([^/]++)/b7ee6f(*:26935)' + .'|892f/([^/]++)/([^/]++)/([^/]++)/b7892f(*:26983)' + .'|0683/([^/]++)/([^/]++)/([^/]++)/b70683(*:27031)' .')' .'|4(?' - .'|288d/([^/]++)/([^/]++)/([^/]++)/b4288d(*:27092)' - .'|a528/([^/]++)/([^/]++)/([^/]++)/b4a528(*:27140)' + .'|288d/([^/]++)/([^/]++)/([^/]++)/b4288d(*:27084)' + .'|a528/([^/]++)/([^/]++)/([^/]++)/b4a528(*:27132)' .')' .'|e(?' - .'|3159/([^/]++)/([^/]++)/([^/]++)/be3159(*:27193)' - .'|b22f/([^/]++)/([^/]++)/([^/]++)/beb22f(*:27241)' - .'|a595/([^/]++)/([^/]++)/([^/]++)/bea595(*:27289)' + .'|3159/([^/]++)/([^/]++)/([^/]++)/be3159(*:27185)' + .'|b22f/([^/]++)/([^/]++)/([^/]++)/beb22f(*:27233)' + .'|a595/([^/]++)/([^/]++)/([^/]++)/bea595(*:27281)' .')' .'|1(?' - .'|eec3/([^/]++)/([^/]++)/([^/]++)/b1eec3(*:27342)' - .'|37fd/([^/]++)/([^/]++)/([^/]++)/b137fd(*:27390)' + .'|eec3/([^/]++)/([^/]++)/([^/]++)/b1eec3(*:27334)' + .'|37fd/([^/]++)/([^/]++)/([^/]++)/b137fd(*:27382)' .')' .'|0(?' - .'|56eb/([^/]++)/([^/]++)/([^/]++)/b056eb(*:27443)' - .'|b183/([^/]++)/([^/]++)/([^/]++)/b0b183(*:27491)' + .'|56eb/([^/]++)/([^/]++)/([^/]++)/b056eb(*:27435)' + .'|b183/([^/]++)/([^/]++)/([^/]++)/b0b183(*:27483)' .')' - .'|f6276/([^/]++)/([^/]++)/([^/]++)/bf6276(*:27541)' + .'|f6276/([^/]++)/([^/]++)/([^/]++)/bf6276(*:27533)' .'|6(?' - .'|edc1/([^/]++)/([^/]++)/([^/]++)/b6edc1(*:27593)' - .'|a108/([^/]++)/([^/]++)/([^/]++)/b6a108(*:27641)' + .'|edc1/([^/]++)/([^/]++)/([^/]++)/b6edc1(*:27585)' + .'|a108/([^/]++)/([^/]++)/([^/]++)/b6a108(*:27633)' .')' - .'|86e8d/([^/]++)/([^/]++)/([^/]++)/b86e8d(*:27691)' + .'|86e8d/([^/]++)/([^/]++)/([^/]++)/b86e8d(*:27683)' .')' .'|/2(?' .'|8(?' - .'|5e19/([^/]++)/([^/]++)/([^/]++)/285e19(*:27749)' + .'|5e19/([^/]++)/([^/]++)/([^/]++)/285e19(*:27741)' .'|2(?' - .'|3f4/([^/]++)/([^/]++)/([^/]++)/2823f4(*:27800)' - .'|67a/([^/]++)/([^/]++)/([^/]++)/28267a(*:27847)' + .'|3f4/([^/]++)/([^/]++)/([^/]++)/2823f4(*:27792)' + .'|67a/([^/]++)/([^/]++)/([^/]++)/28267a(*:27839)' .')' - .'|8cc0/([^/]++)/([^/]++)/([^/]++)/288cc0(*:27896)' - .'|7e03/([^/]++)/([^/]++)/([^/]++)/287e03(*:27944)' + .'|8cc0/([^/]++)/([^/]++)/([^/]++)/288cc0(*:27888)' + .'|7e03/([^/]++)/([^/]++)/([^/]++)/287e03(*:27936)' .')' .'|d(?' - .'|6cc4/([^/]++)/([^/]++)/([^/]++)/2d6cc4(*:27997)' - .'|ea61/([^/]++)/([^/]++)/([^/]++)/2dea61(*:28045)' - .'|ace7/([^/]++)/([^/]++)/([^/]++)/2dace7(*:28093)' + .'|6cc4/([^/]++)/([^/]++)/([^/]++)/2d6cc4(*:27989)' + .'|ea61/([^/]++)/([^/]++)/([^/]++)/2dea61(*:28037)' + .'|ace7/([^/]++)/([^/]++)/([^/]++)/2dace7(*:28085)' .')' .'|b(?' - .'|8a61/([^/]++)/([^/]++)/([^/]++)/2b8a61(*:28146)' - .'|b232/([^/]++)/([^/]++)/([^/]++)/2bb232(*:28194)' - .'|a596/([^/]++)/([^/]++)/([^/]++)/2ba596(*:28242)' - .'|cab9/([^/]++)/([^/]++)/([^/]++)/2bcab9(*:28290)' + .'|8a61/([^/]++)/([^/]++)/([^/]++)/2b8a61(*:28138)' + .'|b232/([^/]++)/([^/]++)/([^/]++)/2bb232(*:28186)' + .'|a596/([^/]++)/([^/]++)/([^/]++)/2ba596(*:28234)' + .'|cab9/([^/]++)/([^/]++)/([^/]++)/2bcab9(*:28282)' .')' .'|9(?' - .'|8f95/([^/]++)/([^/]++)/([^/]++)/298f95(*:28343)' - .'|1597/([^/]++)/([^/]++)/([^/]++)/291597(*:28391)' + .'|8f95/([^/]++)/([^/]++)/([^/]++)/298f95(*:28335)' + .'|1597/([^/]++)/([^/]++)/([^/]++)/291597(*:28383)' .')' - .'|58be1/([^/]++)/([^/]++)/([^/]++)/258be1(*:28441)' + .'|58be1/([^/]++)/([^/]++)/([^/]++)/258be1(*:28433)' .'|3(?' - .'|3509/([^/]++)/([^/]++)/([^/]++)/233509(*:28493)' - .'|ce18/([^/]++)/([^/]++)/([^/]++)/23ce18(*:28541)' + .'|3509/([^/]++)/([^/]++)/([^/]++)/233509(*:28485)' + .'|ce18/([^/]++)/([^/]++)/([^/]++)/23ce18(*:28533)' .')' .'|6(?' - .'|dd0d/([^/]++)/([^/]++)/([^/]++)/26dd0d(*:28594)' - .'|408f/([^/]++)/([^/]++)/([^/]++)/26408f(*:28642)' + .'|dd0d/([^/]++)/([^/]++)/([^/]++)/26dd0d(*:28586)' + .'|408f/([^/]++)/([^/]++)/([^/]++)/26408f(*:28634)' .')' .'|f(?' - .'|37d1/([^/]++)/([^/]++)/([^/]++)/2f37d1(*:28695)' - .'|885d/([^/]++)/([^/]++)/([^/]++)/2f885d(*:28743)' + .'|37d1/([^/]++)/([^/]++)/([^/]++)/2f37d1(*:28687)' + .'|885d/([^/]++)/([^/]++)/([^/]++)/2f885d(*:28735)' .')' .'|2(?' - .'|91d2/([^/]++)/([^/]++)/([^/]++)/2291d2(*:28796)' - .'|ac3c/([^/]++)/([^/]++)/([^/]++)/22ac3c(*:28844)' - .'|fb0c/([^/]++)/([^/]++)/([^/]++)/22fb0c(*:28892)' + .'|91d2/([^/]++)/([^/]++)/([^/]++)/2291d2(*:28788)' + .'|ac3c/([^/]++)/([^/]++)/([^/]++)/22ac3c(*:28836)' + .'|fb0c/([^/]++)/([^/]++)/([^/]++)/22fb0c(*:28884)' .')' .'|4(?' - .'|6819/([^/]++)/([^/]++)/([^/]++)/246819(*:28945)' - .'|896e/([^/]++)/([^/]++)/([^/]++)/24896e(*:28993)' + .'|6819/([^/]++)/([^/]++)/([^/]++)/246819(*:28937)' + .'|896e/([^/]++)/([^/]++)/([^/]++)/24896e(*:28985)' .')' .'|a(?' - .'|fe45/([^/]++)/([^/]++)/([^/]++)/2afe45(*:29046)' - .'|084e/([^/]++)/([^/]++)/([^/]++)/2a084e(*:29094)' - .'|9d12/([^/]++)/([^/]++)/([^/]++)/2a9d12(*:29142)' - .'|b564/([^/]++)/([^/]++)/([^/]++)/2ab564(*:29190)' + .'|fe45/([^/]++)/([^/]++)/([^/]++)/2afe45(*:29038)' + .'|084e/([^/]++)/([^/]++)/([^/]++)/2a084e(*:29086)' + .'|9d12/([^/]++)/([^/]++)/([^/]++)/2a9d12(*:29134)' + .'|b564/([^/]++)/([^/]++)/([^/]++)/2ab564(*:29182)' .')' .'|1(?' - .'|7eed/([^/]++)/([^/]++)/([^/]++)/217eed(*:29243)' - .'|0f76/([^/]++)/([^/]++)/([^/]++)/210f76(*:29291)' + .'|7eed/([^/]++)/([^/]++)/([^/]++)/217eed(*:29235)' + .'|0f76/([^/]++)/([^/]++)/([^/]++)/210f76(*:29283)' .')' - .'|e65f2/([^/]++)/([^/]++)/([^/]++)/2e65f2(*:29341)' - .'|ca65f/([^/]++)/([^/]++)/([^/]++)/2ca65f(*:29390)' - .'|0aee3/([^/]++)/([^/]++)/([^/]++)/20aee3(*:29439)' + .'|e65f2/([^/]++)/([^/]++)/([^/]++)/2e65f2(*:29333)' + .'|ca65f/([^/]++)/([^/]++)/([^/]++)/2ca65f(*:29382)' + .'|0aee3/([^/]++)/([^/]++)/([^/]++)/20aee3(*:29431)' .')' .'|/e(?' .'|8(?' - .'|c065/([^/]++)/([^/]++)/([^/]++)/e8c065(*:29497)' - .'|20a4/([^/]++)/([^/]++)/([^/]++)/e820a4(*:29545)' + .'|c065/([^/]++)/([^/]++)/([^/]++)/e8c065(*:29489)' + .'|20a4/([^/]++)/([^/]++)/([^/]++)/e820a4(*:29537)' .')' .'|2(?' - .'|230b/([^/]++)/([^/]++)/([^/]++)/e2230b(*:29598)' - .'|a2dc/([^/]++)/([^/]++)/([^/]++)/e2a2dc(*:29646)' - .'|05ee/([^/]++)/([^/]++)/([^/]++)/e205ee(*:29694)' + .'|230b/([^/]++)/([^/]++)/([^/]++)/e2230b(*:29590)' + .'|a2dc/([^/]++)/([^/]++)/([^/]++)/e2a2dc(*:29638)' + .'|05ee/([^/]++)/([^/]++)/([^/]++)/e205ee(*:29686)' .')' .'|b(?' - .'|d962/([^/]++)/([^/]++)/([^/]++)/ebd962(*:29747)' - .'|6fdc/([^/]++)/([^/]++)/([^/]++)/eb6fdc(*:29795)' + .'|d962/([^/]++)/([^/]++)/([^/]++)/ebd962(*:29739)' + .'|6fdc/([^/]++)/([^/]++)/([^/]++)/eb6fdc(*:29787)' .')' .'|d(?' - .'|265b/([^/]++)/([^/]++)/([^/]++)/ed265b(*:29848)' - .'|fbe1/([^/]++)/([^/]++)/([^/]++)/edfbe1(*:29896)' - .'|e7e2/([^/]++)/([^/]++)/([^/]++)/ede7e2(*:29944)' + .'|265b/([^/]++)/([^/]++)/([^/]++)/ed265b(*:29840)' + .'|fbe1/([^/]++)/([^/]++)/([^/]++)/edfbe1(*:29888)' + .'|e7e2/([^/]++)/([^/]++)/([^/]++)/ede7e2(*:29936)' .')' .'|6(?' - .'|b4b2/([^/]++)/([^/]++)/([^/]++)/e6b4b2(*:29997)' - .'|cb2a/([^/]++)/([^/]++)/([^/]++)/e6cb2a(*:30045)' + .'|b4b2/([^/]++)/([^/]++)/([^/]++)/e6b4b2(*:29989)' + .'|cb2a/([^/]++)/([^/]++)/([^/]++)/e6cb2a(*:30037)' .')' .'|5(?' - .'|f6ad/([^/]++)/([^/]++)/([^/]++)/e5f6ad(*:30098)' - .'|55eb/([^/]++)/([^/]++)/([^/]++)/e555eb(*:30146)' - .'|841d/([^/]++)/([^/]++)/([^/]++)/e5841d(*:30194)' - .'|7c6b/([^/]++)/([^/]++)/([^/]++)/e57c6b(*:30242)' + .'|f6ad/([^/]++)/([^/]++)/([^/]++)/e5f6ad(*:30090)' + .'|55eb/([^/]++)/([^/]++)/([^/]++)/e555eb(*:30138)' + .'|841d/([^/]++)/([^/]++)/([^/]++)/e5841d(*:30186)' + .'|7c6b/([^/]++)/([^/]++)/([^/]++)/e57c6b(*:30234)' .')' - .'|aae33/([^/]++)/([^/]++)/([^/]++)/eaae33(*:30292)' + .'|aae33/([^/]++)/([^/]++)/([^/]++)/eaae33(*:30284)' .'|4(?' - .'|bb4c/([^/]++)/([^/]++)/([^/]++)/e4bb4c(*:30344)' - .'|9b8b/([^/]++)/([^/]++)/([^/]++)/e49b8b(*:30392)' + .'|bb4c/([^/]++)/([^/]++)/([^/]++)/e4bb4c(*:30336)' + .'|9b8b/([^/]++)/([^/]++)/([^/]++)/e49b8b(*:30384)' .')' .'|7(?' - .'|0611/([^/]++)/([^/]++)/([^/]++)/e70611(*:30445)' - .'|f8a7/([^/]++)/([^/]++)/([^/]++)/e7f8a7(*:30493)' - .'|44f9/([^/]++)/([^/]++)/([^/]++)/e744f9(*:30541)' + .'|0611/([^/]++)/([^/]++)/([^/]++)/e70611(*:30437)' + .'|f8a7/([^/]++)/([^/]++)/([^/]++)/e7f8a7(*:30485)' + .'|44f9/([^/]++)/([^/]++)/([^/]++)/e744f9(*:30533)' .')' .'|9(?' - .'|95f9/([^/]++)/([^/]++)/([^/]++)/e995f9(*:30594)' - .'|4550/([^/]++)/([^/]++)/([^/]++)/e94550(*:30642)' - .'|7ee2/([^/]++)/([^/]++)/([^/]++)/e97ee2(*:30690)' + .'|95f9/([^/]++)/([^/]++)/([^/]++)/e995f9(*:30586)' + .'|4550/([^/]++)/([^/]++)/([^/]++)/e94550(*:30634)' + .'|7ee2/([^/]++)/([^/]++)/([^/]++)/e97ee2(*:30682)' .')' .'|e(?' - .'|fc9e/([^/]++)/([^/]++)/([^/]++)/eefc9e(*:30743)' - .'|b69a/([^/]++)/([^/]++)/([^/]++)/eeb69a(*:30791)' + .'|fc9e/([^/]++)/([^/]++)/([^/]++)/eefc9e(*:30735)' + .'|b69a/([^/]++)/([^/]++)/([^/]++)/eeb69a(*:30783)' .')' .'|0(?' - .'|7413/([^/]++)/([^/]++)/([^/]++)/e07413(*:30844)' - .'|cf1f/([^/]++)/([^/]++)/([^/]++)/e0cf1f(*:30892)' - .'|ec45/([^/]++)/([^/]++)/([^/]++)/e0ec45(*:30940)' + .'|7413/([^/]++)/([^/]++)/([^/]++)/e07413(*:30836)' + .'|cf1f/([^/]++)/([^/]++)/([^/]++)/e0cf1f(*:30884)' + .'|ec45/([^/]++)/([^/]++)/([^/]++)/e0ec45(*:30932)' .')' - .'|f4e3b/([^/]++)/([^/]++)/([^/]++)/ef4e3b(*:30990)' - .'|c5aa0/([^/]++)/([^/]++)/([^/]++)/ec5aa0(*:31039)' + .'|f4e3b/([^/]++)/([^/]++)/([^/]++)/ef4e3b(*:30982)' + .'|c5aa0/([^/]++)/([^/]++)/([^/]++)/ec5aa0(*:31031)' .')' .'|/f(?' .'|f(?' - .'|4d5f/([^/]++)/([^/]++)/([^/]++)/ff4d5f(*:31097)' - .'|eabd/([^/]++)/([^/]++)/([^/]++)/ffeabd(*:31145)' + .'|4d5f/([^/]++)/([^/]++)/([^/]++)/ff4d5f(*:31089)' + .'|eabd/([^/]++)/([^/]++)/([^/]++)/ffeabd(*:31137)' .')' .'|3(?' - .'|f27a/([^/]++)/([^/]++)/([^/]++)/f3f27a(*:31198)' - .'|8762/([^/]++)/([^/]++)/([^/]++)/f38762(*:31246)' + .'|f27a/([^/]++)/([^/]++)/([^/]++)/f3f27a(*:31190)' + .'|8762/([^/]++)/([^/]++)/([^/]++)/f38762(*:31238)' .')' .'|4(?' - .'|be00/([^/]++)/([^/]++)/([^/]++)/f4be00(*:31299)' - .'|5526/([^/]++)/([^/]++)/([^/]++)/f45526(*:31347)' - .'|7d0a/([^/]++)/([^/]++)/([^/]++)/f47d0a(*:31395)' + .'|be00/([^/]++)/([^/]++)/([^/]++)/f4be00(*:31291)' + .'|5526/([^/]++)/([^/]++)/([^/]++)/f45526(*:31339)' + .'|7d0a/([^/]++)/([^/]++)/([^/]++)/f47d0a(*:31387)' .')' .'|0(?' - .'|e52b/([^/]++)/([^/]++)/([^/]++)/f0e52b(*:31448)' - .'|adc8/([^/]++)/([^/]++)/([^/]++)/f0adc8(*:31496)' + .'|e52b/([^/]++)/([^/]++)/([^/]++)/f0e52b(*:31440)' + .'|adc8/([^/]++)/([^/]++)/([^/]++)/f0adc8(*:31488)' .')' - .'|de926/([^/]++)/([^/]++)/([^/]++)/fde926(*:31546)' + .'|de926/([^/]++)/([^/]++)/([^/]++)/fde926(*:31538)' .'|5(?' - .'|deae/([^/]++)/([^/]++)/([^/]++)/f5deae(*:31598)' - .'|7a2f/([^/]++)/([^/]++)/([^/]++)/f57a2f(*:31646)' + .'|deae/([^/]++)/([^/]++)/([^/]++)/f5deae(*:31590)' + .'|7a2f/([^/]++)/([^/]++)/([^/]++)/f57a2f(*:31638)' .')' .'|7(?' - .'|6a89/([^/]++)/([^/]++)/([^/]++)/f76a89(*:31699)' - .'|9921/([^/]++)/([^/]++)/([^/]++)/f79921(*:31747)' - .'|e905/([^/]++)/([^/]++)/([^/]++)/f7e905(*:31795)' + .'|6a89/([^/]++)/([^/]++)/([^/]++)/f76a89(*:31691)' + .'|9921/([^/]++)/([^/]++)/([^/]++)/f79921(*:31739)' + .'|e905/([^/]++)/([^/]++)/([^/]++)/f7e905(*:31787)' .')' .'|2(?' - .'|9c21/([^/]++)/([^/]++)/([^/]++)/f29c21(*:31848)' - .'|201f/([^/]++)/([^/]++)/([^/]++)/f2201f(*:31896)' + .'|9c21/([^/]++)/([^/]++)/([^/]++)/f29c21(*:31840)' + .'|201f/([^/]++)/([^/]++)/([^/]++)/f2201f(*:31888)' .')' .'|a(?' - .'|e0b2/([^/]++)/([^/]++)/([^/]++)/fae0b2(*:31949)' - .'|14d4/([^/]++)/([^/]++)/([^/]++)/fa14d4(*:31997)' - .'|3a3c/([^/]++)/([^/]++)/([^/]++)/fa3a3c(*:32045)' - .'|83a1/([^/]++)/([^/]++)/([^/]++)/fa83a1(*:32093)' + .'|e0b2/([^/]++)/([^/]++)/([^/]++)/fae0b2(*:31941)' + .'|14d4/([^/]++)/([^/]++)/([^/]++)/fa14d4(*:31989)' + .'|3a3c/([^/]++)/([^/]++)/([^/]++)/fa3a3c(*:32037)' + .'|83a1/([^/]++)/([^/]++)/([^/]++)/fa83a1(*:32085)' .')' .'|c(?' - .'|cb3c/([^/]++)/([^/]++)/([^/]++)/fccb3c(*:32146)' - .'|8001/([^/]++)/([^/]++)/([^/]++)/fc8001(*:32194)' - .'|3cf4/([^/]++)/([^/]++)/([^/]++)/fc3cf4(*:32242)' - .'|4930/([^/]++)/([^/]++)/([^/]++)/fc4930(*:32290)' - .')' - .'|64eac/([^/]++)/([^/]++)/([^/]++)/f64eac(*:32340)' - .'|b8970/([^/]++)/([^/]++)/([^/]++)/fb8970(*:32389)' - .'|1c159/([^/]++)/([^/]++)/([^/]++)/f1c159(*:32438)' + .'|cb3c/([^/]++)/([^/]++)/([^/]++)/fccb3c(*:32138)' + .'|8001/([^/]++)/([^/]++)/([^/]++)/fc8001(*:32186)' + .'|3cf4/([^/]++)/([^/]++)/([^/]++)/fc3cf4(*:32234)' + .'|4930/([^/]++)/([^/]++)/([^/]++)/fc4930(*:32282)' + .')' + .'|64eac/([^/]++)/([^/]++)/([^/]++)/f64eac(*:32332)' + .'|b8970/([^/]++)/([^/]++)/([^/]++)/fb8970(*:32381)' + .'|1c159/([^/]++)/([^/]++)/([^/]++)/f1c159(*:32430)' .'|9(?' - .'|028f/([^/]++)/([^/]++)/([^/]++)/f9028f(*:32490)' - .'|a40a/([^/]++)/([^/]++)/([^/]++)/f9a40a(*:32538)' + .'|028f/([^/]++)/([^/]++)/([^/]++)/f9028f(*:32482)' + .'|a40a/([^/]++)/([^/]++)/([^/]++)/f9a40a(*:32530)' .')' .'|e(?' - .'|8c15/([^/]++)/([^/]++)/([^/]++)/fe8c15(*:32591)' - .'|c8d4/([^/]++)/([^/]++)/([^/]++)/fec8d4(*:32639)' - .'|7ee8/([^/]++)/([^/]++)/([^/]++)/fe7ee8(*:32687)' + .'|8c15/([^/]++)/([^/]++)/([^/]++)/fe8c15(*:32583)' + .'|c8d4/([^/]++)/([^/]++)/([^/]++)/fec8d4(*:32631)' + .'|7ee8/([^/]++)/([^/]++)/([^/]++)/fe7ee8(*:32679)' .')' .')' .'|/3(?' .'|8(?' .'|9(?' - .'|bc7/([^/]++)/([^/]++)/([^/]++)/389bc7(*:32749)' - .'|13e/([^/]++)/([^/]++)/([^/]++)/38913e(*:32796)' + .'|bc7/([^/]++)/([^/]++)/([^/]++)/389bc7(*:32741)' + .'|13e/([^/]++)/([^/]++)/([^/]++)/38913e(*:32788)' .')' - .'|71bd/([^/]++)/([^/]++)/([^/]++)/3871bd(*:32845)' + .'|71bd/([^/]++)/([^/]++)/([^/]++)/3871bd(*:32837)' .')' .'|d(?' - .'|c487/([^/]++)/([^/]++)/([^/]++)/3dc487(*:32898)' - .'|2d8c/([^/]++)/([^/]++)/([^/]++)/3d2d8c(*:32946)' - .'|8e28/([^/]++)/([^/]++)/([^/]++)/3d8e28(*:32994)' - .'|f1d4/([^/]++)/([^/]++)/([^/]++)/3df1d4(*:33042)' + .'|c487/([^/]++)/([^/]++)/([^/]++)/3dc487(*:32890)' + .'|2d8c/([^/]++)/([^/]++)/([^/]++)/3d2d8c(*:32938)' + .'|8e28/([^/]++)/([^/]++)/([^/]++)/3d8e28(*:32986)' + .'|f1d4/([^/]++)/([^/]++)/([^/]++)/3df1d4(*:33034)' .')' - .'|7f0e8/([^/]++)/([^/]++)/([^/]++)/37f0e8(*:33092)' + .'|7f0e8/([^/]++)/([^/]++)/([^/]++)/37f0e8(*:33084)' .'|3(?' - .'|e807/([^/]++)/([^/]++)/([^/]++)/33e807(*:33144)' - .'|28bd/([^/]++)/([^/]++)/([^/]++)/3328bd(*:33192)' + .'|e807/([^/]++)/([^/]++)/([^/]++)/33e807(*:33136)' + .'|28bd/([^/]++)/([^/]++)/([^/]++)/3328bd(*:33184)' .')' .'|a(?' .'|0(?' - .'|772/([^/]++)/([^/]++)/([^/]++)/3a0772(*:33248)' - .'|66b/([^/]++)/([^/]++)/([^/]++)/3a066b(*:33295)' + .'|772/([^/]++)/([^/]++)/([^/]++)/3a0772(*:33240)' + .'|66b/([^/]++)/([^/]++)/([^/]++)/3a066b(*:33287)' .')' - .'|835d/([^/]++)/([^/]++)/([^/]++)/3a835d(*:33344)' + .'|835d/([^/]++)/([^/]++)/([^/]++)/3a835d(*:33336)' .')' .'|0(?' - .'|bb38/([^/]++)/([^/]++)/([^/]++)/30bb38(*:33397)' - .'|3ed4/([^/]++)/([^/]++)/([^/]++)/303ed4(*:33445)' - .'|ef30/([^/]++)/([^/]++)/([^/]++)/30ef30(*:33493)' - .'|1ad0/([^/]++)/([^/]++)/([^/]++)/301ad0(*:33541)' + .'|bb38/([^/]++)/([^/]++)/([^/]++)/30bb38(*:33389)' + .'|3ed4/([^/]++)/([^/]++)/([^/]++)/303ed4(*:33437)' + .'|ef30/([^/]++)/([^/]++)/([^/]++)/30ef30(*:33485)' + .'|1ad0/([^/]++)/([^/]++)/([^/]++)/301ad0(*:33533)' .')' .'|4(?' - .'|9389/([^/]++)/([^/]++)/([^/]++)/349389(*:33594)' - .'|35c3/([^/]++)/([^/]++)/([^/]++)/3435c3(*:33642)' + .'|9389/([^/]++)/([^/]++)/([^/]++)/349389(*:33586)' + .'|35c3/([^/]++)/([^/]++)/([^/]++)/3435c3(*:33634)' .')' .'|62(?' - .'|1f1/([^/]++)/([^/]++)/([^/]++)/3621f1(*:33695)' - .'|e80/([^/]++)/([^/]++)/([^/]++)/362e80(*:33742)' + .'|1f1/([^/]++)/([^/]++)/([^/]++)/3621f1(*:33687)' + .'|e80/([^/]++)/([^/]++)/([^/]++)/362e80(*:33734)' .')' .'|5(?' - .'|cf86/([^/]++)/([^/]++)/([^/]++)/35cf86(*:33795)' - .'|2407/([^/]++)/([^/]++)/([^/]++)/352407(*:33843)' + .'|cf86/([^/]++)/([^/]++)/([^/]++)/35cf86(*:33787)' + .'|2407/([^/]++)/([^/]++)/([^/]++)/352407(*:33835)' .')' - .'|2b30a/([^/]++)/([^/]++)/([^/]++)/32b30a(*:33893)' - .'|1839b/([^/]++)/([^/]++)/([^/]++)/31839b(*:33942)' + .'|2b30a/([^/]++)/([^/]++)/([^/]++)/32b30a(*:33885)' + .'|1839b/([^/]++)/([^/]++)/([^/]++)/31839b(*:33934)' .'|b(?' - .'|5dca/([^/]++)/([^/]++)/([^/]++)/3b5dca(*:33994)' - .'|3dba/([^/]++)/([^/]++)/([^/]++)/3b3dba(*:34042)' + .'|5dca/([^/]++)/([^/]++)/([^/]++)/3b5dca(*:33986)' + .'|3dba/([^/]++)/([^/]++)/([^/]++)/3b3dba(*:34034)' .')' - .'|e89eb/([^/]++)/([^/]++)/([^/]++)/3e89eb(*:34092)' - .'|cef96/([^/]++)/([^/]++)/([^/]++)/3cef96(*:34141)' + .'|e89eb/([^/]++)/([^/]++)/([^/]++)/3e89eb(*:34084)' + .'|cef96/([^/]++)/([^/]++)/([^/]++)/3cef96(*:34133)' .')' .'|/0(?' .'|8(?' - .'|7408/([^/]++)/([^/]++)/([^/]++)/087408(*:34199)' - .'|b255/([^/]++)/([^/]++)/([^/]++)/08b255(*:34247)' - .'|c543/([^/]++)/([^/]++)/([^/]++)/08c543(*:34295)' - .'|d986/([^/]++)/([^/]++)/([^/]++)/08d986(*:34343)' - .'|419b/([^/]++)/([^/]++)/([^/]++)/08419b(*:34391)' + .'|7408/([^/]++)/([^/]++)/([^/]++)/087408(*:34191)' + .'|b255/([^/]++)/([^/]++)/([^/]++)/08b255(*:34239)' + .'|c543/([^/]++)/([^/]++)/([^/]++)/08c543(*:34287)' + .'|d986/([^/]++)/([^/]++)/([^/]++)/08d986(*:34335)' + .'|419b/([^/]++)/([^/]++)/([^/]++)/08419b(*:34383)' .')' .'|7(?' - .'|563a/([^/]++)/([^/]++)/([^/]++)/07563a(*:34444)' - .'|6a0c/([^/]++)/([^/]++)/([^/]++)/076a0c(*:34492)' - .'|a96b/([^/]++)/([^/]++)/([^/]++)/07a96b(*:34540)' - .'|c580/([^/]++)/([^/]++)/([^/]++)/07c580(*:34588)' - .'|8719/([^/]++)/([^/]++)/([^/]++)/078719(*:34636)' + .'|563a/([^/]++)/([^/]++)/([^/]++)/07563a(*:34436)' + .'|6a0c/([^/]++)/([^/]++)/([^/]++)/076a0c(*:34484)' + .'|a96b/([^/]++)/([^/]++)/([^/]++)/07a96b(*:34532)' + .'|c580/([^/]++)/([^/]++)/([^/]++)/07c580(*:34580)' + .'|8719/([^/]++)/([^/]++)/([^/]++)/078719(*:34628)' .')' .'|f(?' - .'|cbc6/([^/]++)/([^/]++)/([^/]++)/0fcbc6(*:34689)' - .'|9661/([^/]++)/([^/]++)/([^/]++)/0f9661(*:34737)' + .'|cbc6/([^/]++)/([^/]++)/([^/]++)/0fcbc6(*:34681)' + .'|9661/([^/]++)/([^/]++)/([^/]++)/0f9661(*:34729)' .'|f(?' - .'|39b/([^/]++)/([^/]++)/([^/]++)/0ff39b(*:34788)' - .'|803/([^/]++)/([^/]++)/([^/]++)/0ff803(*:34835)' + .'|39b/([^/]++)/([^/]++)/([^/]++)/0ff39b(*:34780)' + .'|803/([^/]++)/([^/]++)/([^/]++)/0ff803(*:34827)' .')' - .'|840b/([^/]++)/([^/]++)/([^/]++)/0f840b(*:34884)' + .'|840b/([^/]++)/([^/]++)/([^/]++)/0f840b(*:34876)' .')' .'|1(?' - .'|f78b/([^/]++)/([^/]++)/([^/]++)/01f78b(*:34937)' - .'|3a00/([^/]++)/([^/]++)/([^/]++)/013a00(*:34985)' - .'|8825/([^/]++)/([^/]++)/([^/]++)/018825(*:35033)' + .'|f78b/([^/]++)/([^/]++)/([^/]++)/01f78b(*:34929)' + .'|3a00/([^/]++)/([^/]++)/([^/]++)/013a00(*:34977)' + .'|8825/([^/]++)/([^/]++)/([^/]++)/018825(*:35025)' .')' .'|6(?' .'|9(?' - .'|d3b/([^/]++)/([^/]++)/([^/]++)/069d3b(*:35089)' - .'|97f/([^/]++)/([^/]++)/([^/]++)/06997f(*:35136)' + .'|d3b/([^/]++)/([^/]++)/([^/]++)/069d3b(*:35081)' + .'|97f/([^/]++)/([^/]++)/([^/]++)/06997f(*:35128)' .')' - .'|1412/([^/]++)/([^/]++)/([^/]++)/061412(*:35185)' + .'|1412/([^/]++)/([^/]++)/([^/]++)/061412(*:35177)' .')' .'|4(?' - .'|ecb1/([^/]++)/([^/]++)/([^/]++)/04ecb1(*:35238)' - .'|3c3d/([^/]++)/([^/]++)/([^/]++)/043c3d(*:35286)' + .'|ecb1/([^/]++)/([^/]++)/([^/]++)/04ecb1(*:35230)' + .'|3c3d/([^/]++)/([^/]++)/([^/]++)/043c3d(*:35278)' .')' - .'|0ac8e/([^/]++)/([^/]++)/([^/]++)/00ac8e(*:35336)' + .'|0ac8e/([^/]++)/([^/]++)/([^/]++)/00ac8e(*:35328)' .'|5(?' - .'|1e4e/([^/]++)/([^/]++)/([^/]++)/051e4e(*:35388)' - .'|37fb/([^/]++)/([^/]++)/([^/]++)/0537fb(*:35436)' + .'|1e4e/([^/]++)/([^/]++)/([^/]++)/051e4e(*:35380)' + .'|37fb/([^/]++)/([^/]++)/([^/]++)/0537fb(*:35428)' .')' .'|d(?' - .'|7de1/([^/]++)/([^/]++)/([^/]++)/0d7de1(*:35489)' - .'|3180/([^/]++)/([^/]++)/([^/]++)/0d3180(*:35537)' - .'|0871/([^/]++)/([^/]++)/([^/]++)/0d0871(*:35585)' + .'|7de1/([^/]++)/([^/]++)/([^/]++)/0d7de1(*:35481)' + .'|3180/([^/]++)/([^/]++)/([^/]++)/0d3180(*:35529)' + .'|0871/([^/]++)/([^/]++)/([^/]++)/0d0871(*:35577)' .')' - .'|cb929/([^/]++)/([^/]++)/([^/]++)/0cb929(*:35635)' + .'|cb929/([^/]++)/([^/]++)/([^/]++)/0cb929(*:35627)' .'|2(?' - .'|a32a/([^/]++)/([^/]++)/([^/]++)/02a32a(*:35687)' - .'|4d7f/([^/]++)/([^/]++)/([^/]++)/024d7f(*:35735)' + .'|a32a/([^/]++)/([^/]++)/([^/]++)/02a32a(*:35679)' + .'|4d7f/([^/]++)/([^/]++)/([^/]++)/024d7f(*:35727)' .')' - .'|efe32/([^/]++)/([^/]++)/([^/]++)/0efe32(*:35785)' - .'|a113e/([^/]++)/([^/]++)/([^/]++)/0a113e(*:35834)' - .'|b8aff/([^/]++)/([^/]++)/([^/]++)/0b8aff(*:35883)' + .'|efe32/([^/]++)/([^/]++)/([^/]++)/0efe32(*:35777)' + .'|a113e/([^/]++)/([^/]++)/([^/]++)/0a113e(*:35826)' + .'|b8aff/([^/]++)/([^/]++)/([^/]++)/0b8aff(*:35875)' .')' .'|/a(?' .'|7(?' - .'|6088/([^/]++)/([^/]++)/([^/]++)/a76088(*:35941)' - .'|aeed/([^/]++)/([^/]++)/([^/]++)/a7aeed(*:35989)' - .'|33fa/([^/]++)/([^/]++)/([^/]++)/a733fa(*:36037)' + .'|6088/([^/]++)/([^/]++)/([^/]++)/a76088(*:35933)' + .'|aeed/([^/]++)/([^/]++)/([^/]++)/a7aeed(*:35981)' + .'|33fa/([^/]++)/([^/]++)/([^/]++)/a733fa(*:36029)' .')' .'|9a(?' - .'|665/([^/]++)/([^/]++)/([^/]++)/a9a665(*:36090)' - .'|1d5/([^/]++)/([^/]++)/([^/]++)/a9a1d5(*:36137)' + .'|665/([^/]++)/([^/]++)/([^/]++)/a9a665(*:36082)' + .'|1d5/([^/]++)/([^/]++)/([^/]++)/a9a1d5(*:36129)' .')' .'|8(?' - .'|6c45/([^/]++)/([^/]++)/([^/]++)/a86c45(*:36190)' - .'|849b/([^/]++)/([^/]++)/([^/]++)/a8849b(*:36238)' + .'|6c45/([^/]++)/([^/]++)/([^/]++)/a86c45(*:36182)' + .'|849b/([^/]++)/([^/]++)/([^/]++)/a8849b(*:36230)' .'|e(?' - .'|864/([^/]++)/([^/]++)/([^/]++)/a8e864(*:36289)' - .'|cba/([^/]++)/([^/]++)/([^/]++)/a8ecba(*:36336)' + .'|864/([^/]++)/([^/]++)/([^/]++)/a8e864(*:36281)' + .'|cba/([^/]++)/([^/]++)/([^/]++)/a8ecba(*:36328)' .')' .')' .'|c(?' - .'|c3e0/([^/]++)/([^/]++)/([^/]++)/acc3e0(*:36390)' - .'|f4b8/([^/]++)/([^/]++)/([^/]++)/acf4b8(*:36438)' + .'|c3e0/([^/]++)/([^/]++)/([^/]++)/acc3e0(*:36382)' + .'|f4b8/([^/]++)/([^/]++)/([^/]++)/acf4b8(*:36430)' .')' .'|b(?' - .'|d815/([^/]++)/([^/]++)/([^/]++)/abd815(*:36491)' - .'|233b/([^/]++)/([^/]++)/([^/]++)/ab233b(*:36539)' - .'|a3b6/([^/]++)/([^/]++)/([^/]++)/aba3b6(*:36587)' - .'|88b1/([^/]++)/([^/]++)/([^/]++)/ab88b1(*:36635)' + .'|d815/([^/]++)/([^/]++)/([^/]++)/abd815(*:36483)' + .'|233b/([^/]++)/([^/]++)/([^/]++)/ab233b(*:36531)' + .'|a3b6/([^/]++)/([^/]++)/([^/]++)/aba3b6(*:36579)' + .'|88b1/([^/]++)/([^/]++)/([^/]++)/ab88b1(*:36627)' .')' .'|5(?' - .'|3240/([^/]++)/([^/]++)/([^/]++)/a53240(*:36688)' - .'|cdd4/([^/]++)/([^/]++)/([^/]++)/a5cdd4(*:36736)' + .'|3240/([^/]++)/([^/]++)/([^/]++)/a53240(*:36680)' + .'|cdd4/([^/]++)/([^/]++)/([^/]++)/a5cdd4(*:36728)' .')' .'|f(?' .'|d(?' - .'|483/([^/]++)/([^/]++)/([^/]++)/afd483(*:36792)' - .'|a33/([^/]++)/([^/]++)/([^/]++)/afda33(*:36839)' + .'|483/([^/]++)/([^/]++)/([^/]++)/afd483(*:36784)' + .'|a33/([^/]++)/([^/]++)/([^/]++)/afda33(*:36831)' .')' - .'|f162/([^/]++)/([^/]++)/([^/]++)/aff162(*:36888)' + .'|f162/([^/]++)/([^/]++)/([^/]++)/aff162(*:36880)' .')' .'|e(?' - .'|0eb3/([^/]++)/([^/]++)/([^/]++)/ae0eb3(*:36941)' - .'|b313/([^/]++)/([^/]++)/([^/]++)/aeb313(*:36989)' + .'|0eb3/([^/]++)/([^/]++)/([^/]++)/ae0eb3(*:36933)' + .'|b313/([^/]++)/([^/]++)/([^/]++)/aeb313(*:36981)' .')' .'|1(?' - .'|d33d/([^/]++)/([^/]++)/([^/]++)/a1d33d(*:37042)' - .'|140a/([^/]++)/([^/]++)/([^/]++)/a1140a(*:37090)' + .'|d33d/([^/]++)/([^/]++)/([^/]++)/a1d33d(*:37034)' + .'|140a/([^/]++)/([^/]++)/([^/]++)/a1140a(*:37082)' .')' - .'|ddfa9/([^/]++)/([^/]++)/([^/]++)/addfa9(*:37140)' + .'|ddfa9/([^/]++)/([^/]++)/([^/]++)/addfa9(*:37132)' .'|6(?' - .'|7f09/([^/]++)/([^/]++)/([^/]++)/a67f09(*:37192)' - .'|4c94/([^/]++)/([^/]++)/([^/]++)/a64c94(*:37240)' + .'|7f09/([^/]++)/([^/]++)/([^/]++)/a67f09(*:37184)' + .'|4c94/([^/]++)/([^/]++)/([^/]++)/a64c94(*:37232)' .')' - .'|a169b/([^/]++)/([^/]++)/([^/]++)/aa169b(*:37290)' - .'|4300b/([^/]++)/([^/]++)/([^/]++)/a4300b(*:37339)' - .'|3d68b/([^/]++)/([^/]++)/([^/]++)/a3d68b(*:37388)' + .'|a169b/([^/]++)/([^/]++)/([^/]++)/aa169b(*:37282)' + .'|4300b/([^/]++)/([^/]++)/([^/]++)/a4300b(*:37331)' + .'|3d68b/([^/]++)/([^/]++)/([^/]++)/a3d68b(*:37380)' .')' .'|/1(?' .'|0(?' .'|a(?' - .'|7cd/([^/]++)/([^/]++)/([^/]++)/10a7cd(*:37449)' - .'|5ab/([^/]++)/([^/]++)/([^/]++)/10a5ab(*:37496)' + .'|7cd/([^/]++)/([^/]++)/([^/]++)/10a7cd(*:37441)' + .'|5ab/([^/]++)/([^/]++)/([^/]++)/10a5ab(*:37488)' .')' - .'|9a0c/([^/]++)/([^/]++)/([^/]++)/109a0c(*:37545)' + .'|9a0c/([^/]++)/([^/]++)/([^/]++)/109a0c(*:37537)' .')' - .'|3f320/([^/]++)/([^/]++)/([^/]++)/13f320(*:37595)' + .'|3f320/([^/]++)/([^/]++)/([^/]++)/13f320(*:37587)' .'|6(?' - .'|c222/([^/]++)/([^/]++)/([^/]++)/16c222(*:37647)' - .'|8908/([^/]++)/([^/]++)/([^/]++)/168908(*:37695)' + .'|c222/([^/]++)/([^/]++)/([^/]++)/16c222(*:37639)' + .'|8908/([^/]++)/([^/]++)/([^/]++)/168908(*:37687)' .')' .'|5(?' - .'|de21/([^/]++)/([^/]++)/([^/]++)/15de21(*:37748)' - .'|95af/([^/]++)/([^/]++)/([^/]++)/1595af(*:37796)' + .'|de21/([^/]++)/([^/]++)/([^/]++)/15de21(*:37740)' + .'|95af/([^/]++)/([^/]++)/([^/]++)/1595af(*:37788)' .')' .'|1(?' - .'|b921/([^/]++)/([^/]++)/([^/]++)/11b921(*:37849)' - .'|4193/([^/]++)/([^/]++)/([^/]++)/114193(*:37897)' + .'|b921/([^/]++)/([^/]++)/([^/]++)/11b921(*:37841)' + .'|4193/([^/]++)/([^/]++)/([^/]++)/114193(*:37889)' .')' - .'|bb91f/([^/]++)/([^/]++)/([^/]++)/1bb91f(*:37947)' + .'|bb91f/([^/]++)/([^/]++)/([^/]++)/1bb91f(*:37939)' .'|7(?' - .'|28ef/([^/]++)/([^/]++)/([^/]++)/1728ef(*:37999)' - .'|c276/([^/]++)/([^/]++)/([^/]++)/17c276(*:38047)' - .'|0c94/([^/]++)/([^/]++)/([^/]++)/170c94(*:38095)' + .'|28ef/([^/]++)/([^/]++)/([^/]++)/1728ef(*:37991)' + .'|c276/([^/]++)/([^/]++)/([^/]++)/17c276(*:38039)' + .'|0c94/([^/]++)/([^/]++)/([^/]++)/170c94(*:38087)' .')' .'|85(?' - .'|c29/([^/]++)/([^/]++)/([^/]++)/185c29(*:38148)' - .'|e65/([^/]++)/([^/]++)/([^/]++)/185e65(*:38195)' + .'|c29/([^/]++)/([^/]++)/([^/]++)/185c29(*:38140)' + .'|e65/([^/]++)/([^/]++)/([^/]++)/185e65(*:38187)' .')' .'|9(?' - .'|2fc0/([^/]++)/([^/]++)/([^/]++)/192fc0(*:38248)' + .'|2fc0/([^/]++)/([^/]++)/([^/]++)/192fc0(*:38240)' .'|b(?' - .'|c91/([^/]++)/([^/]++)/([^/]++)/19bc91(*:38299)' - .'|650/([^/]++)/([^/]++)/([^/]++)/19b650(*:38346)' + .'|c91/([^/]++)/([^/]++)/([^/]++)/19bc91(*:38291)' + .'|650/([^/]++)/([^/]++)/([^/]++)/19b650(*:38338)' .')' - .'|05ae/([^/]++)/([^/]++)/([^/]++)/1905ae(*:38395)' + .'|05ae/([^/]++)/([^/]++)/([^/]++)/1905ae(*:38387)' .')' .'|e(?' - .'|cfb4/([^/]++)/([^/]++)/([^/]++)/1ecfb4(*:38448)' - .'|fa39/([^/]++)/([^/]++)/([^/]++)/1efa39(*:38496)' - .'|056d/([^/]++)/([^/]++)/([^/]++)/1e056d(*:38544)' + .'|cfb4/([^/]++)/([^/]++)/([^/]++)/1ecfb4(*:38440)' + .'|fa39/([^/]++)/([^/]++)/([^/]++)/1efa39(*:38488)' + .'|056d/([^/]++)/([^/]++)/([^/]++)/1e056d(*:38536)' .')' - .'|aa48f/([^/]++)/([^/]++)/([^/]++)/1aa48f(*:38594)' + .'|aa48f/([^/]++)/([^/]++)/([^/]++)/1aa48f(*:38586)' .'|f(?' - .'|c214/([^/]++)/([^/]++)/([^/]++)/1fc214(*:38646)' - .'|5089/([^/]++)/([^/]++)/([^/]++)/1f5089(*:38694)' - .'|4477/([^/]++)/([^/]++)/([^/]++)/1f4477(*:38742)' + .'|c214/([^/]++)/([^/]++)/([^/]++)/1fc214(*:38638)' + .'|5089/([^/]++)/([^/]++)/([^/]++)/1f5089(*:38686)' + .'|4477/([^/]++)/([^/]++)/([^/]++)/1f4477(*:38734)' .')' .'|c(?' - .'|c363/([^/]++)/([^/]++)/([^/]++)/1cc363(*:38795)' - .'|1d4d/([^/]++)/([^/]++)/([^/]++)/1c1d4d(*:38843)' - .'|e927/([^/]++)/([^/]++)/([^/]++)/1ce927(*:38891)' + .'|c363/([^/]++)/([^/]++)/([^/]++)/1cc363(*:38787)' + .'|1d4d/([^/]++)/([^/]++)/([^/]++)/1c1d4d(*:38835)' + .'|e927/([^/]++)/([^/]++)/([^/]++)/1ce927(*:38883)' .')' .')' .'|/6(?' .'|3(?' - .'|538f/([^/]++)/([^/]++)/([^/]++)/63538f(*:38950)' - .'|2cee/([^/]++)/([^/]++)/([^/]++)/632cee(*:38998)' - .'|95eb/([^/]++)/([^/]++)/([^/]++)/6395eb(*:39046)' + .'|538f/([^/]++)/([^/]++)/([^/]++)/63538f(*:38942)' + .'|2cee/([^/]++)/([^/]++)/([^/]++)/632cee(*:38990)' + .'|95eb/([^/]++)/([^/]++)/([^/]++)/6395eb(*:39038)' .')' .'|9(?' - .'|421f/([^/]++)/([^/]++)/([^/]++)/69421f(*:39099)' - .'|2f93/([^/]++)/([^/]++)/([^/]++)/692f93(*:39147)' + .'|421f/([^/]++)/([^/]++)/([^/]++)/69421f(*:39091)' + .'|2f93/([^/]++)/([^/]++)/([^/]++)/692f93(*:39139)' .')' - .'|5658f/([^/]++)/([^/]++)/([^/]++)/65658f(*:39197)' + .'|5658f/([^/]++)/([^/]++)/([^/]++)/65658f(*:39189)' .'|4(?' - .'|7bba/([^/]++)/([^/]++)/([^/]++)/647bba(*:39249)' - .'|223c/([^/]++)/([^/]++)/([^/]++)/64223c(*:39297)' + .'|7bba/([^/]++)/([^/]++)/([^/]++)/647bba(*:39241)' + .'|223c/([^/]++)/([^/]++)/([^/]++)/64223c(*:39289)' .')' .'|e(?' - .'|2713/([^/]++)/([^/]++)/([^/]++)/6e2713(*:39350)' - .'|0721/([^/]++)/([^/]++)/([^/]++)/6e0721(*:39398)' - .'|7b33/([^/]++)/([^/]++)/([^/]++)/6e7b33(*:39446)' + .'|2713/([^/]++)/([^/]++)/([^/]++)/6e2713(*:39342)' + .'|0721/([^/]++)/([^/]++)/([^/]++)/6e0721(*:39390)' + .'|7b33/([^/]++)/([^/]++)/([^/]++)/6e7b33(*:39438)' .')' .'|0(?' - .'|5ff7/([^/]++)/([^/]++)/([^/]++)/605ff7(*:39499)' - .'|8159/([^/]++)/([^/]++)/([^/]++)/608159(*:39547)' + .'|5ff7/([^/]++)/([^/]++)/([^/]++)/605ff7(*:39491)' + .'|8159/([^/]++)/([^/]++)/([^/]++)/608159(*:39539)' .')' .'|a(?' - .'|ca97/([^/]++)/([^/]++)/([^/]++)/6aca97(*:39600)' - .'|10bb/([^/]++)/([^/]++)/([^/]++)/6a10bb(*:39648)' - .'|ab12/([^/]++)/([^/]++)/([^/]++)/6aab12(*:39696)' + .'|ca97/([^/]++)/([^/]++)/([^/]++)/6aca97(*:39592)' + .'|10bb/([^/]++)/([^/]++)/([^/]++)/6a10bb(*:39640)' + .'|ab12/([^/]++)/([^/]++)/([^/]++)/6aab12(*:39688)' .')' .'|7(?' - .'|66aa/([^/]++)/([^/]++)/([^/]++)/6766aa(*:39749)' - .'|e103/([^/]++)/([^/]++)/([^/]++)/67e103(*:39797)' + .'|66aa/([^/]++)/([^/]++)/([^/]++)/6766aa(*:39741)' + .'|e103/([^/]++)/([^/]++)/([^/]++)/67e103(*:39789)' .'|d(?' - .'|96d/([^/]++)/([^/]++)/([^/]++)/67d96d(*:39848)' - .'|16d/([^/]++)/([^/]++)/([^/]++)/67d16d(*:39895)' + .'|96d/([^/]++)/([^/]++)/([^/]++)/67d96d(*:39840)' + .'|16d/([^/]++)/([^/]++)/([^/]++)/67d16d(*:39887)' .')' - .'|0e8a/([^/]++)/([^/]++)/([^/]++)/670e8a(*:39944)' - .'|7e09/([^/]++)/([^/]++)/([^/]++)/677e09(*:39992)' + .'|0e8a/([^/]++)/([^/]++)/([^/]++)/670e8a(*:39936)' + .'|7e09/([^/]++)/([^/]++)/([^/]++)/677e09(*:39984)' .')' .'|8(?' - .'|264b/([^/]++)/([^/]++)/([^/]++)/68264b(*:40045)' - .'|053a/([^/]++)/([^/]++)/([^/]++)/68053a(*:40093)' + .'|264b/([^/]++)/([^/]++)/([^/]++)/68264b(*:40037)' + .'|053a/([^/]++)/([^/]++)/([^/]++)/68053a(*:40085)' .')' .'|c(?' - .'|2979/([^/]++)/([^/]++)/([^/]++)/6c2979(*:40146)' - .'|d67d/([^/]++)/([^/]++)/([^/]++)/6cd67d(*:40194)' - .'|3cf7/([^/]++)/([^/]++)/([^/]++)/6c3cf7(*:40242)' - .'|fe0e/([^/]++)/([^/]++)/([^/]++)/6cfe0e(*:40290)' - .')' - .'|bc24f/([^/]++)/([^/]++)/([^/]++)/6bc24f(*:40340)' - .'|f2268/([^/]++)/([^/]++)/([^/]++)/6f2268(*:40389)' - .'|1b4a6/([^/]++)/([^/]++)/([^/]++)/61b4a6(*:40438)' - .'|21461/([^/]++)/([^/]++)/([^/]++)/621461(*:40487)' - .'|d0f84/([^/]++)/([^/]++)/([^/]++)/6d0f84(*:40536)' - .'|60229/([^/]++)/([^/]++)/([^/]++)/660229(*:40585)' + .'|2979/([^/]++)/([^/]++)/([^/]++)/6c2979(*:40138)' + .'|d67d/([^/]++)/([^/]++)/([^/]++)/6cd67d(*:40186)' + .'|3cf7/([^/]++)/([^/]++)/([^/]++)/6c3cf7(*:40234)' + .'|fe0e/([^/]++)/([^/]++)/([^/]++)/6cfe0e(*:40282)' + .')' + .'|bc24f/([^/]++)/([^/]++)/([^/]++)/6bc24f(*:40332)' + .'|f2268/([^/]++)/([^/]++)/([^/]++)/6f2268(*:40381)' + .'|1b4a6/([^/]++)/([^/]++)/([^/]++)/61b4a6(*:40430)' + .'|21461/([^/]++)/([^/]++)/([^/]++)/621461(*:40479)' + .'|d0f84/([^/]++)/([^/]++)/([^/]++)/6d0f84(*:40528)' + .'|60229/([^/]++)/([^/]++)/([^/]++)/660229(*:40577)' .')' .'|/c(?' .'|f(?' - .'|6735/([^/]++)/([^/]++)/([^/]++)/cf6735(*:40643)' - .'|bce4/([^/]++)/([^/]++)/([^/]++)/cfbce4(*:40691)' + .'|6735/([^/]++)/([^/]++)/([^/]++)/cf6735(*:40635)' + .'|bce4/([^/]++)/([^/]++)/([^/]++)/cfbce4(*:40683)' .')' .'|3(?' .'|99(?' - .'|86/([^/]++)/([^/]++)/([^/]++)/c39986(*:40747)' - .'|2e/([^/]++)/([^/]++)/([^/]++)/c3992e(*:40793)' + .'|86/([^/]++)/([^/]++)/([^/]++)/c39986(*:40739)' + .'|2e/([^/]++)/([^/]++)/([^/]++)/c3992e(*:40785)' .')' - .'|61bc/([^/]++)/([^/]++)/([^/]++)/c361bc(*:40842)' - .'|2d9b/([^/]++)/([^/]++)/([^/]++)/c32d9b(*:40890)' + .'|61bc/([^/]++)/([^/]++)/([^/]++)/c361bc(*:40834)' + .'|2d9b/([^/]++)/([^/]++)/([^/]++)/c32d9b(*:40882)' .')' - .'|75b6f/([^/]++)/([^/]++)/([^/]++)/c75b6f(*:40940)' + .'|75b6f/([^/]++)/([^/]++)/([^/]++)/c75b6f(*:40932)' .'|c(?' .'|b(?' - .'|1d4/([^/]++)/([^/]++)/([^/]++)/ccb1d4(*:40995)' - .'|098/([^/]++)/([^/]++)/([^/]++)/ccb098(*:41042)' + .'|1d4/([^/]++)/([^/]++)/([^/]++)/ccb1d4(*:40987)' + .'|098/([^/]++)/([^/]++)/([^/]++)/ccb098(*:41034)' .')' - .'|c0aa/([^/]++)/([^/]++)/([^/]++)/ccc0aa(*:41091)' - .'|1aa4/([^/]++)/([^/]++)/([^/]++)/cc1aa4(*:41139)' + .'|c0aa/([^/]++)/([^/]++)/([^/]++)/ccc0aa(*:41083)' + .'|1aa4/([^/]++)/([^/]++)/([^/]++)/cc1aa4(*:41131)' .')' .'|b(?' - .'|cb58/([^/]++)/([^/]++)/([^/]++)/cbcb58(*:41192)' - .'|b6a3/([^/]++)/([^/]++)/([^/]++)/cbb6a3(*:41240)' + .'|cb58/([^/]++)/([^/]++)/([^/]++)/cbcb58(*:41184)' + .'|b6a3/([^/]++)/([^/]++)/([^/]++)/cbb6a3(*:41232)' .')' - .'|9892a/([^/]++)/([^/]++)/([^/]++)/c9892a(*:41290)' - .'|6e19e/([^/]++)/([^/]++)/([^/]++)/c6e19e(*:41339)' - .'|dc0d6/([^/]++)/([^/]++)/([^/]++)/cdc0d6(*:41388)' - .'|5ab0b/([^/]++)/([^/]++)/([^/]++)/c5ab0b(*:41437)' + .'|9892a/([^/]++)/([^/]++)/([^/]++)/c9892a(*:41282)' + .'|6e19e/([^/]++)/([^/]++)/([^/]++)/c6e19e(*:41331)' + .'|dc0d6/([^/]++)/([^/]++)/([^/]++)/cdc0d6(*:41380)' + .'|5ab0b/([^/]++)/([^/]++)/([^/]++)/c5ab0b(*:41429)' .'|a(?' - .'|9c26/([^/]++)/([^/]++)/([^/]++)/ca9c26(*:41489)' - .'|8155/([^/]++)/([^/]++)/([^/]++)/ca8155(*:41537)' - .'|7591/([^/]++)/([^/]++)/([^/]++)/ca7591(*:41585)' + .'|9c26/([^/]++)/([^/]++)/([^/]++)/ca9c26(*:41481)' + .'|8155/([^/]++)/([^/]++)/([^/]++)/ca8155(*:41529)' + .'|7591/([^/]++)/([^/]++)/([^/]++)/ca7591(*:41577)' .')' .'|0(?' - .'|6d06/([^/]++)/([^/]++)/([^/]++)/c06d06(*:41638)' - .'|f168/([^/]++)/([^/]++)/([^/]++)/c0f168(*:41686)' + .'|6d06/([^/]++)/([^/]++)/([^/]++)/c06d06(*:41630)' + .'|f168/([^/]++)/([^/]++)/([^/]++)/c0f168(*:41678)' .')' .'|8(?' - .'|ed21/([^/]++)/([^/]++)/([^/]++)/c8ed21(*:41739)' - .'|fbbc/([^/]++)/([^/]++)/([^/]++)/c8fbbc(*:41787)' - .'|c41c/([^/]++)/([^/]++)/([^/]++)/c8c41c(*:41835)' + .'|ed21/([^/]++)/([^/]++)/([^/]++)/c8ed21(*:41731)' + .'|fbbc/([^/]++)/([^/]++)/([^/]++)/c8fbbc(*:41779)' + .'|c41c/([^/]++)/([^/]++)/([^/]++)/c8c41c(*:41827)' .')' - .'|15da1/([^/]++)/([^/]++)/([^/]++)/c15da1(*:41885)' + .'|15da1/([^/]++)/([^/]++)/([^/]++)/c15da1(*:41877)' .'|2(?' - .'|626d/([^/]++)/([^/]++)/([^/]++)/c2626d(*:41937)' - .'|aee8/([^/]++)/([^/]++)/([^/]++)/c2aee8(*:41985)' - .'|2abf/([^/]++)/([^/]++)/([^/]++)/c22abf(*:42033)' + .'|626d/([^/]++)/([^/]++)/([^/]++)/c2626d(*:41929)' + .'|aee8/([^/]++)/([^/]++)/([^/]++)/c2aee8(*:41977)' + .'|2abf/([^/]++)/([^/]++)/([^/]++)/c22abf(*:42025)' .')' - .'|e78d1/([^/]++)/([^/]++)/([^/]++)/ce78d1(*:42083)' + .'|e78d1/([^/]++)/([^/]++)/([^/]++)/ce78d1(*:42075)' .'|4(?' - .'|015b/([^/]++)/([^/]++)/([^/]++)/c4015b(*:42135)' - .'|b31c/([^/]++)/([^/]++)/([^/]++)/c4b31c(*:42183)' + .'|015b/([^/]++)/([^/]++)/([^/]++)/c4015b(*:42127)' + .'|b31c/([^/]++)/([^/]++)/([^/]++)/c4b31c(*:42175)' .')' .')' .'|/8(?' .'|5(?' - .'|422a/([^/]++)/([^/]++)/([^/]++)/85422a(*:42242)' - .'|1ddf/([^/]++)/([^/]++)/([^/]++)/851ddf(*:42290)' - .'|fc37/([^/]++)/([^/]++)/([^/]++)/85fc37(*:42338)' + .'|422a/([^/]++)/([^/]++)/([^/]++)/85422a(*:42234)' + .'|1ddf/([^/]++)/([^/]++)/([^/]++)/851ddf(*:42282)' + .'|fc37/([^/]++)/([^/]++)/([^/]++)/85fc37(*:42330)' .')' .'|1(?' - .'|4481/([^/]++)/([^/]++)/([^/]++)/814481(*:42391)' - .'|e74d/([^/]++)/([^/]++)/([^/]++)/81e74d(*:42439)' + .'|4481/([^/]++)/([^/]++)/([^/]++)/814481(*:42383)' + .'|e74d/([^/]++)/([^/]++)/([^/]++)/81e74d(*:42431)' .')' .'|d(?' .'|3(?' - .'|420/([^/]++)/([^/]++)/([^/]++)/8d3420(*:42495)' - .'|17b/([^/]++)/([^/]++)/([^/]++)/8d317b(*:42542)' + .'|420/([^/]++)/([^/]++)/([^/]++)/8d3420(*:42487)' + .'|17b/([^/]++)/([^/]++)/([^/]++)/8d317b(*:42534)' .')' - .'|f707/([^/]++)/([^/]++)/([^/]++)/8df707(*:42591)' - .'|6dc3/([^/]++)/([^/]++)/([^/]++)/8d6dc3(*:42639)' + .'|f707/([^/]++)/([^/]++)/([^/]++)/8df707(*:42583)' + .'|6dc3/([^/]++)/([^/]++)/([^/]++)/8d6dc3(*:42631)' .')' .'|e(?' - .'|efcf/([^/]++)/([^/]++)/([^/]++)/8eefcf(*:42692)' - .'|bda5/([^/]++)/([^/]++)/([^/]++)/8ebda5(*:42740)' - .'|82ab/([^/]++)/([^/]++)/([^/]++)/8e82ab(*:42788)' + .'|efcf/([^/]++)/([^/]++)/([^/]++)/8eefcf(*:42684)' + .'|bda5/([^/]++)/([^/]++)/([^/]++)/8ebda5(*:42732)' + .'|82ab/([^/]++)/([^/]++)/([^/]++)/8e82ab(*:42780)' .')' .'|b(?' - .'|16eb/([^/]++)/([^/]++)/([^/]++)/8b16eb(*:42841)' - .'|6dd7/([^/]++)/([^/]++)/([^/]++)/8b6dd7(*:42889)' - .'|5040/([^/]++)/([^/]++)/([^/]++)/8b5040(*:42937)' + .'|16eb/([^/]++)/([^/]++)/([^/]++)/8b16eb(*:42833)' + .'|6dd7/([^/]++)/([^/]++)/([^/]++)/8b6dd7(*:42881)' + .'|5040/([^/]++)/([^/]++)/([^/]++)/8b5040(*:42929)' .')' .'|c(?' - .'|7bbb/([^/]++)/([^/]++)/([^/]++)/8c7bbb(*:42990)' - .'|6744/([^/]++)/([^/]++)/([^/]++)/8c6744(*:43038)' - .'|235f/([^/]++)/([^/]++)/([^/]++)/8c235f(*:43086)' + .'|7bbb/([^/]++)/([^/]++)/([^/]++)/8c7bbb(*:42982)' + .'|6744/([^/]++)/([^/]++)/([^/]++)/8c6744(*:43030)' + .'|235f/([^/]++)/([^/]++)/([^/]++)/8c235f(*:43078)' .')' .'|8(?' - .'|4d24/([^/]++)/([^/]++)/([^/]++)/884d24(*:43139)' - .'|ae63/([^/]++)/([^/]++)/([^/]++)/88ae63(*:43187)' + .'|4d24/([^/]++)/([^/]++)/([^/]++)/884d24(*:43131)' + .'|ae63/([^/]++)/([^/]++)/([^/]++)/88ae63(*:43179)' .')' .'|7(?' - .'|5715/([^/]++)/([^/]++)/([^/]++)/875715(*:43240)' - .'|2488/([^/]++)/([^/]++)/([^/]++)/872488(*:43288)' + .'|5715/([^/]++)/([^/]++)/([^/]++)/875715(*:43232)' + .'|2488/([^/]++)/([^/]++)/([^/]++)/872488(*:43280)' .')' .'|4(?' - .'|1172/([^/]++)/([^/]++)/([^/]++)/841172(*:43341)' - .'|6c26/([^/]++)/([^/]++)/([^/]++)/846c26(*:43389)' - .'|f7e6/([^/]++)/([^/]++)/([^/]++)/84f7e6(*:43437)' - .'|7cc5/([^/]++)/([^/]++)/([^/]++)/847cc5(*:43485)' + .'|1172/([^/]++)/([^/]++)/([^/]++)/841172(*:43333)' + .'|6c26/([^/]++)/([^/]++)/([^/]++)/846c26(*:43381)' + .'|f7e6/([^/]++)/([^/]++)/([^/]++)/84f7e6(*:43429)' + .'|7cc5/([^/]++)/([^/]++)/([^/]++)/847cc5(*:43477)' .')' .'|f(?' - .'|ecb2/([^/]++)/([^/]++)/([^/]++)/8fecb2(*:43538)' - .'|7d80/([^/]++)/([^/]++)/([^/]++)/8f7d80(*:43586)' - .'|468c/([^/]++)/([^/]++)/([^/]++)/8f468c(*:43634)' + .'|ecb2/([^/]++)/([^/]++)/([^/]++)/8fecb2(*:43530)' + .'|7d80/([^/]++)/([^/]++)/([^/]++)/8f7d80(*:43578)' + .'|468c/([^/]++)/([^/]++)/([^/]++)/8f468c(*:43626)' .')' - .'|a0e11/([^/]++)/([^/]++)/([^/]++)/8a0e11(*:43684)' + .'|a0e11/([^/]++)/([^/]++)/([^/]++)/8a0e11(*:43676)' .'|2(?' - .'|f2b3/([^/]++)/([^/]++)/([^/]++)/82f2b3(*:43736)' - .'|489c/([^/]++)/([^/]++)/([^/]++)/82489c(*:43784)' + .'|f2b3/([^/]++)/([^/]++)/([^/]++)/82f2b3(*:43728)' + .'|489c/([^/]++)/([^/]++)/([^/]++)/82489c(*:43776)' .')' .'|6(?' - .'|b122/([^/]++)/([^/]++)/([^/]++)/86b122(*:43837)' - .'|0320/([^/]++)/([^/]++)/([^/]++)/860320(*:43885)' + .'|b122/([^/]++)/([^/]++)/([^/]++)/86b122(*:43829)' + .'|0320/([^/]++)/([^/]++)/([^/]++)/860320(*:43877)' .')' .'|9(?' - .'|2c91/([^/]++)/([^/]++)/([^/]++)/892c91(*:43938)' - .'|fcd0/([^/]++)/([^/]++)/([^/]++)/89fcd0(*:43986)' + .'|2c91/([^/]++)/([^/]++)/([^/]++)/892c91(*:43930)' + .'|fcd0/([^/]++)/([^/]++)/([^/]++)/89fcd0(*:43978)' .')' - .'|065d0/([^/]++)/([^/]++)/([^/]++)/8065d0(*:44036)' + .'|065d0/([^/]++)/([^/]++)/([^/]++)/8065d0(*:44028)' .')' .'|/d(?' .'|6(?' - .'|4a34/([^/]++)/([^/]++)/([^/]++)/d64a34(*:44094)' - .'|c651/([^/]++)/([^/]++)/([^/]++)/d6c651(*:44142)' + .'|4a34/([^/]++)/([^/]++)/([^/]++)/d64a34(*:44086)' + .'|c651/([^/]++)/([^/]++)/([^/]++)/d6c651(*:44134)' .')' .'|f(?' - .'|877f/([^/]++)/([^/]++)/([^/]++)/df877f(*:44195)' - .'|263d/([^/]++)/([^/]++)/([^/]++)/df263d(*:44243)' - .'|7f28/([^/]++)/([^/]++)/([^/]++)/df7f28(*:44291)' - .'|6d23/([^/]++)/([^/]++)/([^/]++)/df6d23(*:44339)' + .'|877f/([^/]++)/([^/]++)/([^/]++)/df877f(*:44187)' + .'|263d/([^/]++)/([^/]++)/([^/]++)/df263d(*:44235)' + .'|7f28/([^/]++)/([^/]++)/([^/]++)/df7f28(*:44283)' + .'|6d23/([^/]++)/([^/]++)/([^/]++)/df6d23(*:44331)' .')' .'|b(?' - .'|85e2/([^/]++)/([^/]++)/([^/]++)/db85e2(*:44392)' - .'|e272/([^/]++)/([^/]++)/([^/]++)/dbe272(*:44440)' + .'|85e2/([^/]++)/([^/]++)/([^/]++)/db85e2(*:44384)' + .'|e272/([^/]++)/([^/]++)/([^/]++)/dbe272(*:44432)' .')' .'|d(?' .'|45(?' - .'|85/([^/]++)/([^/]++)/([^/]++)/dd4585(*:44496)' - .'|04/([^/]++)/([^/]++)/([^/]++)/dd4504(*:44542)' + .'|85/([^/]++)/([^/]++)/([^/]++)/dd4585(*:44488)' + .'|04/([^/]++)/([^/]++)/([^/]++)/dd4504(*:44534)' .')' - .'|8eb9/([^/]++)/([^/]++)/([^/]++)/dd8eb9(*:44591)' + .'|8eb9/([^/]++)/([^/]++)/([^/]++)/dd8eb9(*:44583)' .')' .'|a(?' - .'|ca41/([^/]++)/([^/]++)/([^/]++)/daca41(*:44644)' - .'|8ce5/([^/]++)/([^/]++)/([^/]++)/da8ce5(*:44692)' - .'|0d11/([^/]++)/([^/]++)/([^/]++)/da0d11(*:44740)' + .'|ca41/([^/]++)/([^/]++)/([^/]++)/daca41(*:44636)' + .'|8ce5/([^/]++)/([^/]++)/([^/]++)/da8ce5(*:44684)' + .'|0d11/([^/]++)/([^/]++)/([^/]++)/da0d11(*:44732)' .')' .'|4(?' - .'|90d7/([^/]++)/([^/]++)/([^/]++)/d490d7(*:44793)' - .'|c2e4/([^/]++)/([^/]++)/([^/]++)/d4c2e4(*:44841)' + .'|90d7/([^/]++)/([^/]++)/([^/]++)/d490d7(*:44785)' + .'|c2e4/([^/]++)/([^/]++)/([^/]++)/d4c2e4(*:44833)' .')' .'|8(?' - .'|6ea6/([^/]++)/([^/]++)/([^/]++)/d86ea6(*:44894)' - .'|40cc/([^/]++)/([^/]++)/([^/]++)/d840cc(*:44942)' + .'|6ea6/([^/]++)/([^/]++)/([^/]++)/d86ea6(*:44886)' + .'|40cc/([^/]++)/([^/]++)/([^/]++)/d840cc(*:44934)' .')' .'|c(?' - .'|82d6/([^/]++)/([^/]++)/([^/]++)/dc82d6(*:44995)' - .'|6a70/([^/]++)/([^/]++)/([^/]++)/dc6a70(*:45043)' - .'|5689/([^/]++)/([^/]++)/([^/]++)/dc5689(*:45091)' + .'|82d6/([^/]++)/([^/]++)/([^/]++)/dc82d6(*:44987)' + .'|6a70/([^/]++)/([^/]++)/([^/]++)/dc6a70(*:45035)' + .'|5689/([^/]++)/([^/]++)/([^/]++)/dc5689(*:45083)' .')' .'|7(?' - .'|a728/([^/]++)/([^/]++)/([^/]++)/d7a728(*:45144)' - .'|0732/([^/]++)/([^/]++)/([^/]++)/d70732(*:45192)' - .'|9aac/([^/]++)/([^/]++)/([^/]++)/d79aac(*:45240)' + .'|a728/([^/]++)/([^/]++)/([^/]++)/d7a728(*:45136)' + .'|0732/([^/]++)/([^/]++)/([^/]++)/d70732(*:45184)' + .'|9aac/([^/]++)/([^/]++)/([^/]++)/d79aac(*:45232)' .')' - .'|14220/([^/]++)/([^/]++)/([^/]++)/d14220(*:45290)' + .'|14220/([^/]++)/([^/]++)/([^/]++)/d14220(*:45282)' .'|5(?' - .'|cfea/([^/]++)/([^/]++)/([^/]++)/d5cfea(*:45342)' - .'|8072/([^/]++)/([^/]++)/([^/]++)/d58072(*:45390)' - .'|54f7/([^/]++)/([^/]++)/([^/]++)/d554f7(*:45438)' - .'|16b1/([^/]++)/([^/]++)/([^/]++)/d516b1(*:45486)' - .'|6b9f/([^/]++)/([^/]++)/([^/]++)/d56b9f(*:45534)' + .'|cfea/([^/]++)/([^/]++)/([^/]++)/d5cfea(*:45334)' + .'|8072/([^/]++)/([^/]++)/([^/]++)/d58072(*:45382)' + .'|54f7/([^/]++)/([^/]++)/([^/]++)/d554f7(*:45430)' + .'|16b1/([^/]++)/([^/]++)/([^/]++)/d516b1(*:45478)' + .'|6b9f/([^/]++)/([^/]++)/([^/]++)/d56b9f(*:45526)' .')' - .'|045c5/([^/]++)/([^/]++)/([^/]++)/d045c5(*:45584)' + .'|045c5/([^/]++)/([^/]++)/([^/]++)/d045c5(*:45576)' .'|2(?' - .'|ed45/([^/]++)/([^/]++)/([^/]++)/d2ed45(*:45636)' - .'|40e3/([^/]++)/([^/]++)/([^/]++)/d240e3(*:45684)' + .'|ed45/([^/]++)/([^/]++)/([^/]++)/d2ed45(*:45628)' + .'|40e3/([^/]++)/([^/]++)/([^/]++)/d240e3(*:45676)' .')' - .'|93ed5/([^/]++)/([^/]++)/([^/]++)/d93ed5(*:45734)' + .'|93ed5/([^/]++)/([^/]++)/([^/]++)/d93ed5(*:45726)' .')' .'|/7(?' .'|b(?' - .'|cdf7/([^/]++)/([^/]++)/([^/]++)/7bcdf7(*:45792)' - .'|13b2/([^/]++)/([^/]++)/([^/]++)/7b13b2(*:45840)' + .'|cdf7/([^/]++)/([^/]++)/([^/]++)/7bcdf7(*:45784)' + .'|13b2/([^/]++)/([^/]++)/([^/]++)/7b13b2(*:45832)' .')' - .'|dcd34/([^/]++)/([^/]++)/([^/]++)/7dcd34(*:45890)' + .'|dcd34/([^/]++)/([^/]++)/([^/]++)/7dcd34(*:45882)' .'|f(?' - .'|24d2/([^/]++)/([^/]++)/([^/]++)/7f24d2(*:45942)' - .'|5d04/([^/]++)/([^/]++)/([^/]++)/7f5d04(*:45990)' - .'|1171/([^/]++)/([^/]++)/([^/]++)/7f1171(*:46038)' - .'|a732/([^/]++)/([^/]++)/([^/]++)/7fa732(*:46086)' + .'|24d2/([^/]++)/([^/]++)/([^/]++)/7f24d2(*:45934)' + .'|5d04/([^/]++)/([^/]++)/([^/]++)/7f5d04(*:45982)' + .'|1171/([^/]++)/([^/]++)/([^/]++)/7f1171(*:46030)' + .'|a732/([^/]++)/([^/]++)/([^/]++)/7fa732(*:46078)' .')' .'|6(?' - .'|6ebc/([^/]++)/([^/]++)/([^/]++)/766ebc(*:46139)' - .'|34ea/([^/]++)/([^/]++)/([^/]++)/7634ea(*:46187)' + .'|6ebc/([^/]++)/([^/]++)/([^/]++)/766ebc(*:46131)' + .'|34ea/([^/]++)/([^/]++)/([^/]++)/7634ea(*:46179)' .')' - .'|750ca/([^/]++)/([^/]++)/([^/]++)/7750ca(*:46237)' + .'|750ca/([^/]++)/([^/]++)/([^/]++)/7750ca(*:46229)' .'|1(?' .'|a(?' - .'|3cb/([^/]++)/([^/]++)/([^/]++)/71a3cb(*:46292)' - .'|d16/([^/]++)/([^/]++)/([^/]++)/71ad16(*:46339)' + .'|3cb/([^/]++)/([^/]++)/([^/]++)/71a3cb(*:46284)' + .'|d16/([^/]++)/([^/]++)/([^/]++)/71ad16(*:46331)' .')' - .'|43d7/([^/]++)/([^/]++)/([^/]++)/7143d7(*:46388)' + .'|43d7/([^/]++)/([^/]++)/([^/]++)/7143d7(*:46380)' .')' - .'|88d98/([^/]++)/([^/]++)/([^/]++)/788d98(*:46438)' + .'|88d98/([^/]++)/([^/]++)/([^/]++)/788d98(*:46430)' .'|2(?' - .'|da7f/([^/]++)/([^/]++)/([^/]++)/72da7f(*:46490)' - .'|50eb/([^/]++)/([^/]++)/([^/]++)/7250eb(*:46538)' + .'|da7f/([^/]++)/([^/]++)/([^/]++)/72da7f(*:46482)' + .'|50eb/([^/]++)/([^/]++)/([^/]++)/7250eb(*:46530)' .')' .'|c(?' - .'|590f/([^/]++)/([^/]++)/([^/]++)/7c590f(*:46591)' - .'|e328/([^/]++)/([^/]++)/([^/]++)/7ce328(*:46639)' - .')' - .'|a5392/([^/]++)/([^/]++)/([^/]++)/7a5392(*:46689)' - .'|95c7a/([^/]++)/([^/]++)/([^/]++)/795c7a(*:46738)' - .'|504ad/([^/]++)/([^/]++)/([^/]++)/7504ad(*:46787)' - .'|04afe/([^/]++)/([^/]++)/([^/]++)/704afe(*:46836)' - .'|4bba2/([^/]++)/([^/]++)/([^/]++)/74bba2(*:46885)' + .'|590f/([^/]++)/([^/]++)/([^/]++)/7c590f(*:46583)' + .'|e328/([^/]++)/([^/]++)/([^/]++)/7ce328(*:46631)' + .')' + .'|a5392/([^/]++)/([^/]++)/([^/]++)/7a5392(*:46681)' + .'|95c7a/([^/]++)/([^/]++)/([^/]++)/795c7a(*:46730)' + .'|504ad/([^/]++)/([^/]++)/([^/]++)/7504ad(*:46779)' + .'|04afe/([^/]++)/([^/]++)/([^/]++)/704afe(*:46828)' + .'|4bba2/([^/]++)/([^/]++)/([^/]++)/74bba2(*:46877)' .')' .'|/9(?' .'|b(?' - .'|72e3/([^/]++)/([^/]++)/([^/]++)/9b72e3(*:46943)' - .'|698e/([^/]++)/([^/]++)/([^/]++)/9b698e(*:46991)' + .'|72e3/([^/]++)/([^/]++)/([^/]++)/9b72e3(*:46935)' + .'|698e/([^/]++)/([^/]++)/([^/]++)/9b698e(*:46983)' .')' - .'|7e852/([^/]++)/([^/]++)/([^/]++)/97e852(*:47041)' - .'|4c7bb/([^/]++)/([^/]++)/([^/]++)/94c7bb(*:47090)' + .'|7e852/([^/]++)/([^/]++)/([^/]++)/97e852(*:47033)' + .'|4c7bb/([^/]++)/([^/]++)/([^/]++)/94c7bb(*:47082)' .'|9(?' - .'|c5e0/([^/]++)/([^/]++)/([^/]++)/99c5e0(*:47142)' - .'|6a7f/([^/]++)/([^/]++)/([^/]++)/996a7f(*:47190)' - .'|bcfc/([^/]++)/([^/]++)/([^/]++)/99bcfc(*:47238)' - .'|0827/([^/]++)/([^/]++)/([^/]++)/990827(*:47286)' + .'|c5e0/([^/]++)/([^/]++)/([^/]++)/99c5e0(*:47134)' + .'|6a7f/([^/]++)/([^/]++)/([^/]++)/996a7f(*:47182)' + .'|bcfc/([^/]++)/([^/]++)/([^/]++)/99bcfc(*:47230)' + .'|0827/([^/]++)/([^/]++)/([^/]++)/990827(*:47278)' .')' .'|a(?' - .'|d6aa/([^/]++)/([^/]++)/([^/]++)/9ad6aa(*:47339)' - .'|b0d8/([^/]++)/([^/]++)/([^/]++)/9ab0d8(*:47387)' + .'|d6aa/([^/]++)/([^/]++)/([^/]++)/9ad6aa(*:47331)' + .'|b0d8/([^/]++)/([^/]++)/([^/]++)/9ab0d8(*:47379)' .')' .'|c(?' - .'|f81d/([^/]++)/([^/]++)/([^/]++)/9cf81d(*:47440)' - .'|c138/([^/]++)/([^/]++)/([^/]++)/9cc138(*:47488)' - .'|82c7/([^/]++)/([^/]++)/([^/]++)/9c82c7(*:47536)' - .'|0180/([^/]++)/([^/]++)/([^/]++)/9c0180(*:47584)' + .'|f81d/([^/]++)/([^/]++)/([^/]++)/9cf81d(*:47432)' + .'|c138/([^/]++)/([^/]++)/([^/]++)/9cc138(*:47480)' + .'|82c7/([^/]++)/([^/]++)/([^/]++)/9c82c7(*:47528)' + .'|0180/([^/]++)/([^/]++)/([^/]++)/9c0180(*:47576)' .')' .'|f(?' - .'|396f/([^/]++)/([^/]++)/([^/]++)/9f396f(*:47637)' - .'|e859/([^/]++)/([^/]++)/([^/]++)/9fe859(*:47685)' - .'|53d8/([^/]++)/([^/]++)/([^/]++)/9f53d8(*:47733)' + .'|396f/([^/]++)/([^/]++)/([^/]++)/9f396f(*:47629)' + .'|e859/([^/]++)/([^/]++)/([^/]++)/9fe859(*:47677)' + .'|53d8/([^/]++)/([^/]++)/([^/]++)/9f53d8(*:47725)' .')' - .'|12d2b/([^/]++)/([^/]++)/([^/]++)/912d2b(*:47783)' - .'|59a55/([^/]++)/([^/]++)/([^/]++)/959a55(*:47832)' + .'|12d2b/([^/]++)/([^/]++)/([^/]++)/912d2b(*:47775)' + .'|59a55/([^/]++)/([^/]++)/([^/]++)/959a55(*:47824)' .'|6(?' - .'|ea64/([^/]++)/([^/]++)/([^/]++)/96ea64(*:47884)' - .'|b9bf/([^/]++)/([^/]++)/([^/]++)/96b9bf(*:47932)' + .'|ea64/([^/]++)/([^/]++)/([^/]++)/96ea64(*:47876)' + .'|b9bf/([^/]++)/([^/]++)/([^/]++)/96b9bf(*:47924)' .')' - .'|e3cfc/([^/]++)/([^/]++)/([^/]++)/9e3cfc(*:47982)' + .'|e3cfc/([^/]++)/([^/]++)/([^/]++)/9e3cfc(*:47974)' .'|2(?' - .'|fb0c/([^/]++)/([^/]++)/([^/]++)/92fb0c(*:48034)' - .'|262b/([^/]++)/([^/]++)/([^/]++)/92262b(*:48082)' - .'|32fe/([^/]++)/([^/]++)/([^/]++)/9232fe(*:48130)' - .'|977a/([^/]++)/([^/]++)/([^/]++)/92977a(*:48178)' - .')' - .'|8d6f5/([^/]++)/([^/]++)/([^/]++)/98d6f5(*:48228)' - .'|0794e/([^/]++)/([^/]++)/([^/]++)/90794e(*:48277)' - .'|34815/([^/]++)/([^/]++)/([^/]++)/934815(*:48326)' + .'|fb0c/([^/]++)/([^/]++)/([^/]++)/92fb0c(*:48026)' + .'|262b/([^/]++)/([^/]++)/([^/]++)/92262b(*:48074)' + .'|32fe/([^/]++)/([^/]++)/([^/]++)/9232fe(*:48122)' + .'|977a/([^/]++)/([^/]++)/([^/]++)/92977a(*:48170)' + .')' + .'|8d6f5/([^/]++)/([^/]++)/([^/]++)/98d6f5(*:48220)' + .'|0794e/([^/]++)/([^/]++)/([^/]++)/90794e(*:48269)' + .'|34815/([^/]++)/([^/]++)/([^/]++)/934815(*:48318)' .')' .'|/4(?' .'|e(?' - .'|4b5f/([^/]++)/([^/]++)/([^/]++)/4e4b5f(*:48384)' - .'|a06f/([^/]++)/([^/]++)/([^/]++)/4ea06f(*:48432)' + .'|4b5f/([^/]++)/([^/]++)/([^/]++)/4e4b5f(*:48376)' + .'|a06f/([^/]++)/([^/]++)/([^/]++)/4ea06f(*:48424)' .'|0(?' - .'|928/([^/]++)/([^/]++)/([^/]++)/4e0928(*:48483)' - .'|cb6/([^/]++)/([^/]++)/([^/]++)/4e0cb6(*:48530)' + .'|928/([^/]++)/([^/]++)/([^/]++)/4e0928(*:48475)' + .'|cb6/([^/]++)/([^/]++)/([^/]++)/4e0cb6(*:48522)' .')' .')' - .'|6922a/([^/]++)/([^/]++)/([^/]++)/46922a(*:48581)' + .'|6922a/([^/]++)/([^/]++)/([^/]++)/46922a(*:48573)' .'|4(?' - .'|c4c1/([^/]++)/([^/]++)/([^/]++)/44c4c1(*:48633)' - .'|3cb0/([^/]++)/([^/]++)/([^/]++)/443cb0(*:48681)' + .'|c4c1/([^/]++)/([^/]++)/([^/]++)/44c4c1(*:48625)' + .'|3cb0/([^/]++)/([^/]++)/([^/]++)/443cb0(*:48673)' .')' - .'|8ab2f/([^/]++)/([^/]++)/([^/]++)/48ab2f(*:48731)' + .'|8ab2f/([^/]++)/([^/]++)/([^/]++)/48ab2f(*:48723)' .'|5(?' - .'|645a/([^/]++)/([^/]++)/([^/]++)/45645a(*:48783)' - .'|58db/([^/]++)/([^/]++)/([^/]++)/4558db(*:48831)' + .'|645a/([^/]++)/([^/]++)/([^/]++)/45645a(*:48775)' + .'|58db/([^/]++)/([^/]++)/([^/]++)/4558db(*:48823)' .')' - .'|2e77b/([^/]++)/([^/]++)/([^/]++)/42e77b(*:48881)' - .'|c27ce/([^/]++)/([^/]++)/([^/]++)/4c27ce(*:48930)' + .'|2e77b/([^/]++)/([^/]++)/([^/]++)/42e77b(*:48873)' + .'|c27ce/([^/]++)/([^/]++)/([^/]++)/4c27ce(*:48922)' .'|f(?' - .'|fce0/([^/]++)/([^/]++)/([^/]++)/4ffce0(*:48982)' - .'|ac9b/([^/]++)/([^/]++)/([^/]++)/4fac9b(*:49030)' + .'|fce0/([^/]++)/([^/]++)/([^/]++)/4ffce0(*:48974)' + .'|ac9b/([^/]++)/([^/]++)/([^/]++)/4fac9b(*:49022)' .')' - .'|a47d2/([^/]++)/([^/]++)/([^/]++)/4a47d2(*:49080)' - .'|70e7a/([^/]++)/([^/]++)/([^/]++)/470e7a(*:49129)' + .'|a47d2/([^/]++)/([^/]++)/([^/]++)/4a47d2(*:49072)' + .'|70e7a/([^/]++)/([^/]++)/([^/]++)/470e7a(*:49121)' .'|b(?' .'|0(?' - .'|4a6/([^/]++)/([^/]++)/([^/]++)/4b04a6(*:49184)' - .'|a59/([^/]++)/([^/]++)/([^/]++)/4b0a59(*:49231)' - .'|250/([^/]++)/([^/]++)/([^/]++)/4b0250(*:49278)' + .'|4a6/([^/]++)/([^/]++)/([^/]++)/4b04a6(*:49176)' + .'|a59/([^/]++)/([^/]++)/([^/]++)/4b0a59(*:49223)' + .'|250/([^/]++)/([^/]++)/([^/]++)/4b0250(*:49270)' .')' - .'|6538/([^/]++)/([^/]++)/([^/]++)/4b6538(*:49327)' + .'|6538/([^/]++)/([^/]++)/([^/]++)/4b6538(*:49319)' .')' .'|3(?' .'|f(?' - .'|a7f/([^/]++)/([^/]++)/([^/]++)/43fa7f(*:49383)' - .'|eae/([^/]++)/([^/]++)/([^/]++)/43feae(*:49430)' + .'|a7f/([^/]++)/([^/]++)/([^/]++)/43fa7f(*:49375)' + .'|eae/([^/]++)/([^/]++)/([^/]++)/43feae(*:49422)' .')' - .'|0c36/([^/]++)/([^/]++)/([^/]++)/430c36(*:49479)' - .'|7d7d/([^/]++)/([^/]++)/([^/]++)/437d7d(*:49527)' - .'|1135/([^/]++)/([^/]++)/([^/]++)/431135(*:49575)' + .'|0c36/([^/]++)/([^/]++)/([^/]++)/430c36(*:49471)' + .'|7d7d/([^/]++)/([^/]++)/([^/]++)/437d7d(*:49519)' + .'|1135/([^/]++)/([^/]++)/([^/]++)/431135(*:49567)' .')' .'|d(?' - .'|5b99/([^/]++)/([^/]++)/([^/]++)/4d5b99(*:49628)' - .'|aa3d/([^/]++)/([^/]++)/([^/]++)/4daa3d(*:49676)' + .'|5b99/([^/]++)/([^/]++)/([^/]++)/4d5b99(*:49620)' + .'|aa3d/([^/]++)/([^/]++)/([^/]++)/4daa3d(*:49668)' .')' - .'|9c9ad/([^/]++)/([^/]++)/([^/]++)/49c9ad(*:49726)' + .'|9c9ad/([^/]++)/([^/]++)/([^/]++)/49c9ad(*:49718)' .')' .')$}sD', ); @@ -2290,505 +2290,505 @@ public function match($rawPathinfo) 24688 => array(array('_route' => '_391'), array('a', 'b', 'c'), null, null), 24737 => array(array('_route' => '_462'), array('a', 'b', 'c'), null, null), 24786 => array(array('_route' => '_476'), array('a', 'b', 'c'), null, null), - 24845 => array(array('_route' => '_501'), array('a', 'b', 'c'), null, null), - 24897 => array(array('_route' => '_514'), array('a', 'b', 'c'), null, null), - 24945 => array(array('_route' => '_731'), array('a', 'b', 'c'), null, null), - 24998 => array(array('_route' => '_522'), array('a', 'b', 'c'), null, null), - 25046 => array(array('_route' => '_693'), array('a', 'b', 'c'), null, null), - 25099 => array(array('_route' => '_537'), array('a', 'b', 'c'), null, null), - 25147 => array(array('_route' => '_554'), array('a', 'b', 'c'), null, null), - 25195 => array(array('_route' => '_645'), array('a', 'b', 'c'), null, null), - 25243 => array(array('_route' => '_862'), array('a', 'b', 'c'), null, null), - 25296 => array(array('_route' => '_539'), array('a', 'b', 'c'), null, null), - 25344 => array(array('_route' => '_729'), array('a', 'b', 'c'), null, null), - 25392 => array(array('_route' => '_897'), array('a', 'b', 'c'), null, null), - 25445 => array(array('_route' => '_561'), array('a', 'b', 'c'), null, null), - 25493 => array(array('_route' => '_615'), array('a', 'b', 'c'), null, null), - 25541 => array(array('_route' => '_764'), array('a', 'b', 'c'), null, null), - 25589 => array(array('_route' => '_948'), array('a', 'b', 'c'), null, null), - 25642 => array(array('_route' => '_617'), array('a', 'b', 'c'), null, null), - 25690 => array(array('_route' => '_671'), array('a', 'b', 'c'), null, null), - 25743 => array(array('_route' => '_649'), array('a', 'b', 'c'), null, null), - 25791 => array(array('_route' => '_651'), array('a', 'b', 'c'), null, null), - 25839 => array(array('_route' => '_684'), array('a', 'b', 'c'), null, null), - 25892 => array(array('_route' => '_669'), array('a', 'b', 'c'), null, null), - 25940 => array(array('_route' => '_743'), array('a', 'b', 'c'), null, null), - 25988 => array(array('_route' => '_962'), array('a', 'b', 'c'), null, null), - 26041 => array(array('_route' => '_694'), array('a', 'b', 'c'), null, null), - 26089 => array(array('_route' => '_985'), array('a', 'b', 'c'), null, null), - 26142 => array(array('_route' => '_707'), array('a', 'b', 'c'), null, null), - 26190 => array(array('_route' => '_718'), array('a', 'b', 'c'), null, null), - 26243 => array(array('_route' => '_720'), array('a', 'b', 'c'), null, null), - 26291 => array(array('_route' => '_745'), array('a', 'b', 'c'), null, null), - 26341 => array(array('_route' => '_874'), array('a', 'b', 'c'), null, null), - 26399 => array(array('_route' => '_502'), array('a', 'b', 'c'), null, null), - 26447 => array(array('_route' => '_667'), array('a', 'b', 'c'), null, null), - 26495 => array(array('_route' => '_911'), array('a', 'b', 'c'), null, null), - 26543 => array(array('_route' => '_942'), array('a', 'b', 'c'), null, null), - 26593 => array(array('_route' => '_504'), array('a', 'b', 'c'), null, null), - 26645 => array(array('_route' => '_524'), array('a', 'b', 'c'), null, null), - 26693 => array(array('_route' => '_732'), array('a', 'b', 'c'), null, null), - 26746 => array(array('_route' => '_596'), array('a', 'b', 'c'), null, null), - 26794 => array(array('_route' => '_601'), array('a', 'b', 'c'), null, null), - 26847 => array(array('_route' => '_620'), array('a', 'b', 'c'), null, null), - 26895 => array(array('_route' => '_631'), array('a', 'b', 'c'), null, null), - 26943 => array(array('_route' => '_771'), array('a', 'b', 'c'), null, null), - 26991 => array(array('_route' => '_937'), array('a', 'b', 'c'), null, null), - 27039 => array(array('_route' => '_999'), array('a', 'b', 'c'), null, null), - 27092 => array(array('_route' => '_657'), array('a', 'b', 'c'), null, null), - 27140 => array(array('_route' => '_701'), array('a', 'b', 'c'), null, null), - 27193 => array(array('_route' => '_662'), array('a', 'b', 'c'), null, null), - 27241 => array(array('_route' => '_797'), array('a', 'b', 'c'), null, null), - 27289 => array(array('_route' => '_924'), array('a', 'b', 'c'), null, null), - 27342 => array(array('_route' => '_702'), array('a', 'b', 'c'), null, null), - 27390 => array(array('_route' => '_750'), array('a', 'b', 'c'), null, null), - 27443 => array(array('_route' => '_749'), array('a', 'b', 'c'), null, null), - 27491 => array(array('_route' => '_837'), array('a', 'b', 'c'), null, null), - 27541 => array(array('_route' => '_758'), array('a', 'b', 'c'), null, null), - 27593 => array(array('_route' => '_810'), array('a', 'b', 'c'), null, null), - 27641 => array(array('_route' => '_902'), array('a', 'b', 'c'), null, null), - 27691 => array(array('_route' => '_845'), array('a', 'b', 'c'), null, null), - 27749 => array(array('_route' => '_503'), array('a', 'b', 'c'), null, null), - 27800 => array(array('_route' => '_756'), array('a', 'b', 'c'), null, null), - 27847 => array(array('_route' => '_799'), array('a', 'b', 'c'), null, null), - 27896 => array(array('_route' => '_769'), array('a', 'b', 'c'), null, null), - 27944 => array(array('_route' => '_981'), array('a', 'b', 'c'), null, null), - 27997 => array(array('_route' => '_507'), array('a', 'b', 'c'), null, null), - 28045 => array(array('_route' => '_672'), array('a', 'b', 'c'), null, null), - 28093 => array(array('_route' => '_790'), array('a', 'b', 'c'), null, null), - 28146 => array(array('_route' => '_515'), array('a', 'b', 'c'), null, null), - 28194 => array(array('_route' => '_523'), array('a', 'b', 'c'), null, null), - 28242 => array(array('_route' => '_957'), array('a', 'b', 'c'), null, null), - 28290 => array(array('_route' => '_995'), array('a', 'b', 'c'), null, null), - 28343 => array(array('_route' => '_532'), array('a', 'b', 'c'), null, null), - 28391 => array(array('_route' => '_642'), array('a', 'b', 'c'), null, null), - 28441 => array(array('_route' => '_579'), array('a', 'b', 'c'), null, null), - 28493 => array(array('_route' => '_625'), array('a', 'b', 'c'), null, null), - 28541 => array(array('_route' => '_916'), array('a', 'b', 'c'), null, null), - 28594 => array(array('_route' => '_633'), array('a', 'b', 'c'), null, null), - 28642 => array(array('_route' => '_656'), array('a', 'b', 'c'), null, null), - 28695 => array(array('_route' => '_658'), array('a', 'b', 'c'), null, null), - 28743 => array(array('_route' => '_943'), array('a', 'b', 'c'), null, null), - 28796 => array(array('_route' => '_664'), array('a', 'b', 'c'), null, null), - 28844 => array(array('_route' => '_852'), array('a', 'b', 'c'), null, null), - 28892 => array(array('_route' => '_870'), array('a', 'b', 'c'), null, null), - 28945 => array(array('_route' => '_683'), array('a', 'b', 'c'), null, null), - 28993 => array(array('_route' => '_915'), array('a', 'b', 'c'), null, null), - 29046 => array(array('_route' => '_719'), array('a', 'b', 'c'), null, null), - 29094 => array(array('_route' => '_859'), array('a', 'b', 'c'), null, null), - 29142 => array(array('_route' => '_912'), array('a', 'b', 'c'), null, null), - 29190 => array(array('_route' => '_978'), array('a', 'b', 'c'), null, null), - 29243 => array(array('_route' => '_738'), array('a', 'b', 'c'), null, null), - 29291 => array(array('_route' => '_883'), array('a', 'b', 'c'), null, null), - 29341 => array(array('_route' => '_741'), array('a', 'b', 'c'), null, null), - 29390 => array(array('_route' => '_760'), array('a', 'b', 'c'), null, null), - 29439 => array(array('_route' => '_895'), array('a', 'b', 'c'), null, null), - 29497 => array(array('_route' => '_505'), array('a', 'b', 'c'), null, null), - 29545 => array(array('_route' => '_935'), array('a', 'b', 'c'), null, null), - 29598 => array(array('_route' => '_509'), array('a', 'b', 'c'), null, null), - 29646 => array(array('_route' => '_820'), array('a', 'b', 'c'), null, null), - 29694 => array(array('_route' => '_910'), array('a', 'b', 'c'), null, null), - 29747 => array(array('_route' => '_518'), array('a', 'b', 'c'), null, null), - 29795 => array(array('_route' => '_618'), array('a', 'b', 'c'), null, null), - 29848 => array(array('_route' => '_546'), array('a', 'b', 'c'), null, null), - 29896 => array(array('_route' => '_740'), array('a', 'b', 'c'), null, null), - 29944 => array(array('_route' => '_867'), array('a', 'b', 'c'), null, null), - 29997 => array(array('_route' => '_572'), array('a', 'b', 'c'), null, null), - 30045 => array(array('_route' => '_952'), array('a', 'b', 'c'), null, null), - 30098 => array(array('_route' => '_573'), array('a', 'b', 'c'), null, null), - 30146 => array(array('_route' => '_692'), array('a', 'b', 'c'), null, null), - 30194 => array(array('_route' => '_700'), array('a', 'b', 'c'), null, null), - 30242 => array(array('_route' => '_772'), array('a', 'b', 'c'), null, null), - 30292 => array(array('_route' => '_653'), array('a', 'b', 'c'), null, null), - 30344 => array(array('_route' => '_695'), array('a', 'b', 'c'), null, null), - 30392 => array(array('_route' => '_748'), array('a', 'b', 'c'), null, null), - 30445 => array(array('_route' => '_710'), array('a', 'b', 'c'), null, null), - 30493 => array(array('_route' => '_716'), array('a', 'b', 'c'), null, null), - 30541 => array(array('_route' => '_969'), array('a', 'b', 'c'), null, null), - 30594 => array(array('_route' => '_734'), array('a', 'b', 'c'), null, null), - 30642 => array(array('_route' => '_742'), array('a', 'b', 'c'), null, null), - 30690 => array(array('_route' => '_844'), array('a', 'b', 'c'), null, null), - 30743 => array(array('_route' => '_763'), array('a', 'b', 'c'), null, null), - 30791 => array(array('_route' => '_965'), array('a', 'b', 'c'), null, null), - 30844 => array(array('_route' => '_778'), array('a', 'b', 'c'), null, null), - 30892 => array(array('_route' => '_813'), array('a', 'b', 'c'), null, null), - 30940 => array(array('_route' => '_831'), array('a', 'b', 'c'), null, null), - 30990 => array(array('_route' => '_955'), array('a', 'b', 'c'), null, null), - 31039 => array(array('_route' => '_997'), array('a', 'b', 'c'), null, null), - 31097 => array(array('_route' => '_506'), array('a', 'b', 'c'), null, null), - 31145 => array(array('_route' => '_575'), array('a', 'b', 'c'), null, null), - 31198 => array(array('_route' => '_516'), array('a', 'b', 'c'), null, null), - 31246 => array(array('_route' => '_553'), array('a', 'b', 'c'), null, null), - 31299 => array(array('_route' => '_528'), array('a', 'b', 'c'), null, null), - 31347 => array(array('_route' => '_847'), array('a', 'b', 'c'), null, null), - 31395 => array(array('_route' => '_904'), array('a', 'b', 'c'), null, null), - 31448 => array(array('_route' => '_574'), array('a', 'b', 'c'), null, null), - 31496 => array(array('_route' => '_818'), array('a', 'b', 'c'), null, null), - 31546 => array(array('_route' => '_577'), array('a', 'b', 'c'), null, null), - 31598 => array(array('_route' => '_584'), array('a', 'b', 'c'), null, null), - 31646 => array(array('_route' => '_905'), array('a', 'b', 'c'), null, null), - 31699 => array(array('_route' => '_612'), array('a', 'b', 'c'), null, null), - 31747 => array(array('_route' => '_688'), array('a', 'b', 'c'), null, null), - 31795 => array(array('_route' => '_854'), array('a', 'b', 'c'), null, null), - 31848 => array(array('_route' => '_613'), array('a', 'b', 'c'), null, null), - 31896 => array(array('_route' => '_767'), array('a', 'b', 'c'), null, null), - 31949 => array(array('_route' => '_666'), array('a', 'b', 'c'), null, null), - 31997 => array(array('_route' => '_759'), array('a', 'b', 'c'), null, null), - 32045 => array(array('_route' => '_827'), array('a', 'b', 'c'), null, null), - 32093 => array(array('_route' => '_840'), array('a', 'b', 'c'), null, null), - 32146 => array(array('_route' => '_680'), array('a', 'b', 'c'), null, null), - 32194 => array(array('_route' => '_784'), array('a', 'b', 'c'), null, null), - 32242 => array(array('_route' => '_842'), array('a', 'b', 'c'), null, null), - 32290 => array(array('_route' => '_860'), array('a', 'b', 'c'), null, null), - 32340 => array(array('_route' => '_704'), array('a', 'b', 'c'), null, null), - 32389 => array(array('_route' => '_727'), array('a', 'b', 'c'), null, null), - 32438 => array(array('_route' => '_777'), array('a', 'b', 'c'), null, null), - 32490 => array(array('_route' => '_838'), array('a', 'b', 'c'), null, null), - 32538 => array(array('_route' => '_861'), array('a', 'b', 'c'), null, null), - 32591 => array(array('_route' => '_849'), array('a', 'b', 'c'), null, null), - 32639 => array(array('_route' => '_982'), array('a', 'b', 'c'), null, null), - 32687 => array(array('_route' => '_986'), array('a', 'b', 'c'), null, null), - 32749 => array(array('_route' => '_508'), array('a', 'b', 'c'), null, null), - 32796 => array(array('_route' => '_517'), array('a', 'b', 'c'), null, null), - 32845 => array(array('_route' => '_622'), array('a', 'b', 'c'), null, null), - 32898 => array(array('_route' => '_513'), array('a', 'b', 'c'), null, null), - 32946 => array(array('_route' => '_655'), array('a', 'b', 'c'), null, null), - 32994 => array(array('_route' => '_843'), array('a', 'b', 'c'), null, null), - 33042 => array(array('_route' => '_939'), array('a', 'b', 'c'), null, null), - 33092 => array(array('_route' => '_529'), array('a', 'b', 'c'), null, null), - 33144 => array(array('_route' => '_535'), array('a', 'b', 'c'), null, null), - 33192 => array(array('_route' => '_685'), array('a', 'b', 'c'), null, null), - 33248 => array(array('_route' => '_559'), array('a', 'b', 'c'), null, null), - 33295 => array(array('_route' => '_661'), array('a', 'b', 'c'), null, null), - 33344 => array(array('_route' => '_768'), array('a', 'b', 'c'), null, null), - 33397 => array(array('_route' => '_589'), array('a', 'b', 'c'), null, null), - 33445 => array(array('_route' => '_647'), array('a', 'b', 'c'), null, null), - 33493 => array(array('_route' => '_652'), array('a', 'b', 'c'), null, null), - 33541 => array(array('_route' => '_834'), array('a', 'b', 'c'), null, null), - 33594 => array(array('_route' => '_591'), array('a', 'b', 'c'), null, null), - 33642 => array(array('_route' => '_599'), array('a', 'b', 'c'), null, null), - 33695 => array(array('_route' => '_787'), array('a', 'b', 'c'), null, null), - 33742 => array(array('_route' => '_848'), array('a', 'b', 'c'), null, null), - 33795 => array(array('_route' => '_796'), array('a', 'b', 'c'), null, null), - 33843 => array(array('_route' => '_877'), array('a', 'b', 'c'), null, null), - 33893 => array(array('_route' => '_809'), array('a', 'b', 'c'), null, null), - 33942 => array(array('_route' => '_817'), array('a', 'b', 'c'), null, null), - 33994 => array(array('_route' => '_819'), array('a', 'b', 'c'), null, null), - 34042 => array(array('_route' => '_865'), array('a', 'b', 'c'), null, null), - 34092 => array(array('_route' => '_919'), array('a', 'b', 'c'), null, null), - 34141 => array(array('_route' => '_949'), array('a', 'b', 'c'), null, null), - 34199 => array(array('_route' => '_510'), array('a', 'b', 'c'), null, null), - 34247 => array(array('_route' => '_590'), array('a', 'b', 'c'), null, null), - 34295 => array(array('_route' => '_597'), array('a', 'b', 'c'), null, null), - 34343 => array(array('_route' => '_682'), array('a', 'b', 'c'), null, null), - 34391 => array(array('_route' => '_723'), array('a', 'b', 'c'), null, null), - 34444 => array(array('_route' => '_521'), array('a', 'b', 'c'), null, null), - 34492 => array(array('_route' => '_594'), array('a', 'b', 'c'), null, null), - 34540 => array(array('_route' => '_689'), array('a', 'b', 'c'), null, null), - 34588 => array(array('_route' => '_713'), array('a', 'b', 'c'), null, null), - 34636 => array(array('_route' => '_889'), array('a', 'b', 'c'), null, null), - 34689 => array(array('_route' => '_531'), array('a', 'b', 'c'), null, null), - 34737 => array(array('_route' => '_639'), array('a', 'b', 'c'), null, null), - 34788 => array(array('_route' => '_646'), array('a', 'b', 'c'), null, null), - 34835 => array(array('_route' => '_659'), array('a', 'b', 'c'), null, null), - 34884 => array(array('_route' => '_959'), array('a', 'b', 'c'), null, null), - 34937 => array(array('_route' => '_550'), array('a', 'b', 'c'), null, null), - 34985 => array(array('_route' => '_833'), array('a', 'b', 'c'), null, null), - 35033 => array(array('_route' => '_899'), array('a', 'b', 'c'), null, null), - 35089 => array(array('_route' => '_580'), array('a', 'b', 'c'), null, null), - 35136 => array(array('_route' => '_762'), array('a', 'b', 'c'), null, null), - 35185 => array(array('_route' => '_896'), array('a', 'b', 'c'), null, null), - 35238 => array(array('_route' => '_595'), array('a', 'b', 'c'), null, null), - 35286 => array(array('_route' => '_933'), array('a', 'b', 'c'), null, null), - 35336 => array(array('_route' => '_610'), array('a', 'b', 'c'), null, null), - 35388 => array(array('_route' => '_629'), array('a', 'b', 'c'), null, null), - 35436 => array(array('_route' => '_744'), array('a', 'b', 'c'), null, null), - 35489 => array(array('_route' => '_674'), array('a', 'b', 'c'), null, null), - 35537 => array(array('_route' => '_726'), array('a', 'b', 'c'), null, null), - 35585 => array(array('_route' => '_929'), array('a', 'b', 'c'), null, null), - 35635 => array(array('_route' => '_696'), array('a', 'b', 'c'), null, null), - 35687 => array(array('_route' => '_841'), array('a', 'b', 'c'), null, null), - 35735 => array(array('_route' => '_890'), array('a', 'b', 'c'), null, null), - 35785 => array(array('_route' => '_885'), array('a', 'b', 'c'), null, null), - 35834 => array(array('_route' => '_888'), array('a', 'b', 'c'), null, null), - 35883 => array(array('_route' => '_996'), array('a', 'b', 'c'), null, null), - 35941 => array(array('_route' => '_511'), array('a', 'b', 'c'), null, null), - 35989 => array(array('_route' => '_576'), array('a', 'b', 'c'), null, null), - 36037 => array(array('_route' => '_623'), array('a', 'b', 'c'), null, null), - 36090 => array(array('_route' => '_560'), array('a', 'b', 'c'), null, null), - 36137 => array(array('_route' => '_585'), array('a', 'b', 'c'), null, null), - 36190 => array(array('_route' => '_570'), array('a', 'b', 'c'), null, null), - 36238 => array(array('_route' => '_578'), array('a', 'b', 'c'), null, null), - 36289 => array(array('_route' => '_780'), array('a', 'b', 'c'), null, null), - 36336 => array(array('_route' => '_808'), array('a', 'b', 'c'), null, null), - 36390 => array(array('_route' => '_593'), array('a', 'b', 'c'), null, null), - 36438 => array(array('_route' => '_900'), array('a', 'b', 'c'), null, null), - 36491 => array(array('_route' => '_632'), array('a', 'b', 'c'), null, null), - 36539 => array(array('_route' => '_654'), array('a', 'b', 'c'), null, null), - 36587 => array(array('_route' => '_721'), array('a', 'b', 'c'), null, null), - 36635 => array(array('_route' => '_836'), array('a', 'b', 'c'), null, null), - 36688 => array(array('_route' => '_637'), array('a', 'b', 'c'), null, null), - 36736 => array(array('_route' => '_737'), array('a', 'b', 'c'), null, null), - 36792 => array(array('_route' => '_699'), array('a', 'b', 'c'), null, null), - 36839 => array(array('_route' => '_822'), array('a', 'b', 'c'), null, null), - 36888 => array(array('_route' => '_853'), array('a', 'b', 'c'), null, null), - 36941 => array(array('_route' => '_708'), array('a', 'b', 'c'), null, null), - 36989 => array(array('_route' => '_871'), array('a', 'b', 'c'), null, null), - 37042 => array(array('_route' => '_752'), array('a', 'b', 'c'), null, null), - 37090 => array(array('_route' => '_989'), array('a', 'b', 'c'), null, null), - 37140 => array(array('_route' => '_855'), array('a', 'b', 'c'), null, null), - 37192 => array(array('_route' => '_858'), array('a', 'b', 'c'), null, null), - 37240 => array(array('_route' => '_898'), array('a', 'b', 'c'), null, null), - 37290 => array(array('_route' => '_903'), array('a', 'b', 'c'), null, null), - 37339 => array(array('_route' => '_909'), array('a', 'b', 'c'), null, null), - 37388 => array(array('_route' => '_950'), array('a', 'b', 'c'), null, null), - 37449 => array(array('_route' => '_512'), array('a', 'b', 'c'), null, null), - 37496 => array(array('_route' => '_691'), array('a', 'b', 'c'), null, null), - 37545 => array(array('_route' => '_686'), array('a', 'b', 'c'), null, null), - 37595 => array(array('_route' => '_527'), array('a', 'b', 'c'), null, null), - 37647 => array(array('_route' => '_541'), array('a', 'b', 'c'), null, null), - 37695 => array(array('_route' => '_956'), array('a', 'b', 'c'), null, null), - 37748 => array(array('_route' => '_555'), array('a', 'b', 'c'), null, null), - 37796 => array(array('_route' => '_681'), array('a', 'b', 'c'), null, null), - 37849 => array(array('_route' => '_556'), array('a', 'b', 'c'), null, null), - 37897 => array(array('_route' => '_802'), array('a', 'b', 'c'), null, null), - 37947 => array(array('_route' => '_558'), array('a', 'b', 'c'), null, null), - 37999 => array(array('_route' => '_564'), array('a', 'b', 'c'), null, null), - 38047 => array(array('_route' => '_670'), array('a', 'b', 'c'), null, null), - 38095 => array(array('_route' => '_884'), array('a', 'b', 'c'), null, null), - 38148 => array(array('_route' => '_627'), array('a', 'b', 'c'), null, null), - 38195 => array(array('_route' => '_746'), array('a', 'b', 'c'), null, null), - 38248 => array(array('_route' => '_668'), array('a', 'b', 'c'), null, null), - 38299 => array(array('_route' => '_712'), array('a', 'b', 'c'), null, null), - 38346 => array(array('_route' => '_863'), array('a', 'b', 'c'), null, null), - 38395 => array(array('_route' => '_801'), array('a', 'b', 'c'), null, null), - 38448 => array(array('_route' => '_709'), array('a', 'b', 'c'), null, null), - 38496 => array(array('_route' => '_850'), array('a', 'b', 'c'), null, null), - 38544 => array(array('_route' => '_918'), array('a', 'b', 'c'), null, null), - 38594 => array(array('_route' => '_803'), array('a', 'b', 'c'), null, null), - 38646 => array(array('_route' => '_864'), array('a', 'b', 'c'), null, null), - 38694 => array(array('_route' => '_880'), array('a', 'b', 'c'), null, null), - 38742 => array(array('_route' => '_927'), array('a', 'b', 'c'), null, null), - 38795 => array(array('_route' => '_930'), array('a', 'b', 'c'), null, null), - 38843 => array(array('_route' => '_951'), array('a', 'b', 'c'), null, null), - 38891 => array(array('_route' => '_963'), array('a', 'b', 'c'), null, null), - 38950 => array(array('_route' => '_519'), array('a', 'b', 'c'), null, null), - 38998 => array(array('_route' => '_823'), array('a', 'b', 'c'), null, null), - 39046 => array(array('_route' => '_954'), array('a', 'b', 'c'), null, null), - 39099 => array(array('_route' => '_525'), array('a', 'b', 'c'), null, null), - 39147 => array(array('_route' => '_991'), array('a', 'b', 'c'), null, null), - 39197 => array(array('_route' => '_536'), array('a', 'b', 'c'), null, null), - 39249 => array(array('_route' => '_545'), array('a', 'b', 'c'), null, null), - 39297 => array(array('_route' => '_944'), array('a', 'b', 'c'), null, null), - 39350 => array(array('_route' => '_557'), array('a', 'b', 'c'), null, null), - 39398 => array(array('_route' => '_783'), array('a', 'b', 'c'), null, null), - 39446 => array(array('_route' => '_807'), array('a', 'b', 'c'), null, null), - 39499 => array(array('_route' => '_586'), array('a', 'b', 'c'), null, null), - 39547 => array(array('_route' => '_711'), array('a', 'b', 'c'), null, null), - 39600 => array(array('_route' => '_598'), array('a', 'b', 'c'), null, null), - 39648 => array(array('_route' => '_635'), array('a', 'b', 'c'), null, null), - 39696 => array(array('_route' => '_983'), array('a', 'b', 'c'), null, null), - 39749 => array(array('_route' => '_634'), array('a', 'b', 'c'), null, null), - 39797 => array(array('_route' => '_641'), array('a', 'b', 'c'), null, null), - 39848 => array(array('_route' => '_779'), array('a', 'b', 'c'), null, null), - 39895 => array(array('_route' => '_876'), array('a', 'b', 'c'), null, null), - 39944 => array(array('_route' => '_811'), array('a', 'b', 'c'), null, null), - 39992 => array(array('_route' => '_824'), array('a', 'b', 'c'), null, null), - 40045 => array(array('_route' => '_660'), array('a', 'b', 'c'), null, null), - 40093 => array(array('_route' => '_789'), array('a', 'b', 'c'), null, null), - 40146 => array(array('_route' => '_733'), array('a', 'b', 'c'), null, null), - 40194 => array(array('_route' => '_735'), array('a', 'b', 'c'), null, null), - 40242 => array(array('_route' => '_882'), array('a', 'b', 'c'), null, null), - 40290 => array(array('_route' => '_967'), array('a', 'b', 'c'), null, null), - 40340 => array(array('_route' => '_736'), array('a', 'b', 'c'), null, null), - 40389 => array(array('_route' => '_753'), array('a', 'b', 'c'), null, null), - 40438 => array(array('_route' => '_786'), array('a', 'b', 'c'), null, null), - 40487 => array(array('_route' => '_907'), array('a', 'b', 'c'), null, null), - 40536 => array(array('_route' => '_920'), array('a', 'b', 'c'), null, null), - 40585 => array(array('_route' => '_971'), array('a', 'b', 'c'), null, null), - 40643 => array(array('_route' => '_520'), array('a', 'b', 'c'), null, null), - 40691 => array(array('_route' => '_891'), array('a', 'b', 'c'), null, null), - 40747 => array(array('_route' => '_534'), array('a', 'b', 'c'), null, null), - 40793 => array(array('_route' => '_602'), array('a', 'b', 'c'), null, null), - 40842 => array(array('_route' => '_605'), array('a', 'b', 'c'), null, null), - 40890 => array(array('_route' => '_979'), array('a', 'b', 'c'), null, null), - 40940 => array(array('_route' => '_547'), array('a', 'b', 'c'), null, null), - 40995 => array(array('_route' => '_549'), array('a', 'b', 'c'), null, null), - 41042 => array(array('_route' => '_755'), array('a', 'b', 'c'), null, null), - 41091 => array(array('_route' => '_922'), array('a', 'b', 'c'), null, null), - 41139 => array(array('_route' => '_977'), array('a', 'b', 'c'), null, null), - 41192 => array(array('_route' => '_565'), array('a', 'b', 'c'), null, null), - 41240 => array(array('_route' => '_926'), array('a', 'b', 'c'), null, null), - 41290 => array(array('_route' => '_571'), array('a', 'b', 'c'), null, null), - 41339 => array(array('_route' => '_581'), array('a', 'b', 'c'), null, null), - 41388 => array(array('_route' => '_619'), array('a', 'b', 'c'), null, null), - 41437 => array(array('_route' => '_636'), array('a', 'b', 'c'), null, null), - 41489 => array(array('_route' => '_679'), array('a', 'b', 'c'), null, null), - 41537 => array(array('_route' => '_866'), array('a', 'b', 'c'), null, null), - 41585 => array(array('_route' => '_973'), array('a', 'b', 'c'), null, null), - 41638 => array(array('_route' => '_690'), array('a', 'b', 'c'), null, null), - 41686 => array(array('_route' => '_775'), array('a', 'b', 'c'), null, null), - 41739 => array(array('_route' => '_722'), array('a', 'b', 'c'), null, null), - 41787 => array(array('_route' => '_906'), array('a', 'b', 'c'), null, null), - 41835 => array(array('_route' => '_946'), array('a', 'b', 'c'), null, null), - 41885 => array(array('_route' => '_788'), array('a', 'b', 'c'), null, null), - 41937 => array(array('_route' => '_828'), array('a', 'b', 'c'), null, null), - 41985 => array(array('_route' => '_892'), array('a', 'b', 'c'), null, null), - 42033 => array(array('_route' => '_972'), array('a', 'b', 'c'), null, null), - 42083 => array(array('_route' => '_829'), array('a', 'b', 'c'), null, null), - 42135 => array(array('_route' => '_923'), array('a', 'b', 'c'), null, null), - 42183 => array(array('_route' => '_947'), array('a', 'b', 'c'), null, null), - 42242 => array(array('_route' => '_526'), array('a', 'b', 'c'), null, null), - 42290 => array(array('_route' => '_614'), array('a', 'b', 'c'), null, null), - 42338 => array(array('_route' => '_621'), array('a', 'b', 'c'), null, null), - 42391 => array(array('_route' => '_543'), array('a', 'b', 'c'), null, null), - 42439 => array(array('_route' => '_812'), array('a', 'b', 'c'), null, null), - 42495 => array(array('_route' => '_548'), array('a', 'b', 'c'), null, null), - 42542 => array(array('_route' => '_747'), array('a', 'b', 'c'), null, null), - 42591 => array(array('_route' => '_715'), array('a', 'b', 'c'), null, null), - 42639 => array(array('_route' => '_940'), array('a', 'b', 'c'), null, null), - 42692 => array(array('_route' => '_563'), array('a', 'b', 'c'), null, null), - 42740 => array(array('_route' => '_611'), array('a', 'b', 'c'), null, null), - 42788 => array(array('_route' => '_830'), array('a', 'b', 'c'), null, null), - 42841 => array(array('_route' => '_569'), array('a', 'b', 'c'), null, null), - 42889 => array(array('_route' => '_908'), array('a', 'b', 'c'), null, null), - 42937 => array(array('_route' => '_913'), array('a', 'b', 'c'), null, null), - 42990 => array(array('_route' => '_644'), array('a', 'b', 'c'), null, null), - 43038 => array(array('_route' => '_776'), array('a', 'b', 'c'), null, null), - 43086 => array(array('_route' => '_856'), array('a', 'b', 'c'), null, null), - 43139 => array(array('_route' => '_650'), array('a', 'b', 'c'), null, null), - 43187 => array(array('_route' => '_761'), array('a', 'b', 'c'), null, null), - 43240 => array(array('_route' => '_663'), array('a', 'b', 'c'), null, null), - 43288 => array(array('_route' => '_754'), array('a', 'b', 'c'), null, null), - 43341 => array(array('_route' => '_665'), array('a', 'b', 'c'), null, null), - 43389 => array(array('_route' => '_805'), array('a', 'b', 'c'), null, null), - 43437 => array(array('_route' => '_846'), array('a', 'b', 'c'), null, null), - 43485 => array(array('_route' => '_857'), array('a', 'b', 'c'), null, null), - 43538 => array(array('_route' => '_675'), array('a', 'b', 'c'), null, null), - 43586 => array(array('_route' => '_839'), array('a', 'b', 'c'), null, null), - 43634 => array(array('_route' => '_968'), array('a', 'b', 'c'), null, null), - 43684 => array(array('_route' => '_697'), array('a', 'b', 'c'), null, null), - 43736 => array(array('_route' => '_725'), array('a', 'b', 'c'), null, null), - 43784 => array(array('_route' => '_794'), array('a', 'b', 'c'), null, null), - 43837 => array(array('_route' => '_773'), array('a', 'b', 'c'), null, null), - 43885 => array(array('_route' => '_992'), array('a', 'b', 'c'), null, null), - 43938 => array(array('_route' => '_901'), array('a', 'b', 'c'), null, null), - 43986 => array(array('_route' => '_970'), array('a', 'b', 'c'), null, null), - 44036 => array(array('_route' => '_964'), array('a', 'b', 'c'), null, null), - 44094 => array(array('_route' => '_530'), array('a', 'b', 'c'), null, null), - 44142 => array(array('_route' => '_703'), array('a', 'b', 'c'), null, null), - 44195 => array(array('_route' => '_533'), array('a', 'b', 'c'), null, null), - 44243 => array(array('_route' => '_739'), array('a', 'b', 'c'), null, null), - 44291 => array(array('_route' => '_791'), array('a', 'b', 'c'), null, null), - 44339 => array(array('_route' => '_987'), array('a', 'b', 'c'), null, null), - 44392 => array(array('_route' => '_566'), array('a', 'b', 'c'), null, null), - 44440 => array(array('_route' => '_592'), array('a', 'b', 'c'), null, null), - 44496 => array(array('_route' => '_568'), array('a', 'b', 'c'), null, null), - 44542 => array(array('_route' => '_868'), array('a', 'b', 'c'), null, null), - 44591 => array(array('_route' => '_878'), array('a', 'b', 'c'), null, null), - 44644 => array(array('_route' => '_588'), array('a', 'b', 'c'), null, null), - 44692 => array(array('_route' => '_793'), array('a', 'b', 'c'), null, null), - 44740 => array(array('_route' => '_917'), array('a', 'b', 'c'), null, null), - 44793 => array(array('_route' => '_600'), array('a', 'b', 'c'), null, null), - 44841 => array(array('_route' => '_728'), array('a', 'b', 'c'), null, null), - 44894 => array(array('_route' => '_603'), array('a', 'b', 'c'), null, null), - 44942 => array(array('_route' => '_765'), array('a', 'b', 'c'), null, null), - 44995 => array(array('_route' => '_607'), array('a', 'b', 'c'), null, null), - 45043 => array(array('_route' => '_676'), array('a', 'b', 'c'), null, null), - 45091 => array(array('_route' => '_804'), array('a', 'b', 'c'), null, null), - 45144 => array(array('_route' => '_609'), array('a', 'b', 'c'), null, null), - 45192 => array(array('_route' => '_961'), array('a', 'b', 'c'), null, null), - 45240 => array(array('_route' => '_980'), array('a', 'b', 'c'), null, null), - 45290 => array(array('_route' => '_714'), array('a', 'b', 'c'), null, null), - 45342 => array(array('_route' => '_730'), array('a', 'b', 'c'), null, null), - 45390 => array(array('_route' => '_806'), array('a', 'b', 'c'), null, null), - 45438 => array(array('_route' => '_825'), array('a', 'b', 'c'), null, null), - 45486 => array(array('_route' => '_879'), array('a', 'b', 'c'), null, null), - 45534 => array(array('_route' => '_893'), array('a', 'b', 'c'), null, null), - 45584 => array(array('_route' => '_928'), array('a', 'b', 'c'), null, null), - 45636 => array(array('_route' => '_932'), array('a', 'b', 'c'), null, null), - 45684 => array(array('_route' => '_958'), array('a', 'b', 'c'), null, null), - 45734 => array(array('_route' => '_984'), array('a', 'b', 'c'), null, null), - 45792 => array(array('_route' => '_538'), array('a', 'b', 'c'), null, null), - 45840 => array(array('_route' => '_993'), array('a', 'b', 'c'), null, null), - 45890 => array(array('_route' => '_542'), array('a', 'b', 'c'), null, null), - 45942 => array(array('_route' => '_551'), array('a', 'b', 'c'), null, null), - 45990 => array(array('_route' => '_687'), array('a', 'b', 'c'), null, null), - 46038 => array(array('_route' => '_724'), array('a', 'b', 'c'), null, null), - 46086 => array(array('_route' => '_925'), array('a', 'b', 'c'), null, null), - 46139 => array(array('_route' => '_587'), array('a', 'b', 'c'), null, null), - 46187 => array(array('_route' => '_914'), array('a', 'b', 'c'), null, null), - 46237 => array(array('_route' => '_616'), array('a', 'b', 'c'), null, null), - 46292 => array(array('_route' => '_677'), array('a', 'b', 'c'), null, null), - 46339 => array(array('_route' => '_815'), array('a', 'b', 'c'), null, null), - 46388 => array(array('_route' => '_781'), array('a', 'b', 'c'), null, null), - 46438 => array(array('_route' => '_717'), array('a', 'b', 'c'), null, null), - 46490 => array(array('_route' => '_782'), array('a', 'b', 'c'), null, null), - 46538 => array(array('_route' => '_832'), array('a', 'b', 'c'), null, null), - 46591 => array(array('_route' => '_795'), array('a', 'b', 'c'), null, null), - 46639 => array(array('_route' => '_887'), array('a', 'b', 'c'), null, null), - 46689 => array(array('_route' => '_800'), array('a', 'b', 'c'), null, null), - 46738 => array(array('_route' => '_826'), array('a', 'b', 'c'), null, null), - 46787 => array(array('_route' => '_881'), array('a', 'b', 'c'), null, null), - 46836 => array(array('_route' => '_886'), array('a', 'b', 'c'), null, null), - 46885 => array(array('_route' => '_938'), array('a', 'b', 'c'), null, null), - 46943 => array(array('_route' => '_540'), array('a', 'b', 'c'), null, null), - 46991 => array(array('_route' => '_643'), array('a', 'b', 'c'), null, null), - 47041 => array(array('_route' => '_544'), array('a', 'b', 'c'), null, null), - 47090 => array(array('_route' => '_552'), array('a', 'b', 'c'), null, null), - 47142 => array(array('_route' => '_567'), array('a', 'b', 'c'), null, null), - 47190 => array(array('_route' => '_608'), array('a', 'b', 'c'), null, null), - 47238 => array(array('_route' => '_698'), array('a', 'b', 'c'), null, null), - 47286 => array(array('_route' => '_988'), array('a', 'b', 'c'), null, null), - 47339 => array(array('_route' => '_583'), array('a', 'b', 'c'), null, null), - 47387 => array(array('_route' => '_998'), array('a', 'b', 'c'), null, null), - 47440 => array(array('_route' => '_604'), array('a', 'b', 'c'), null, null), - 47488 => array(array('_route' => '_630'), array('a', 'b', 'c'), null, null), - 47536 => array(array('_route' => '_706'), array('a', 'b', 'c'), null, null), - 47584 => array(array('_route' => '_976'), array('a', 'b', 'c'), null, null), - 47637 => array(array('_route' => '_673'), array('a', 'b', 'c'), null, null), - 47685 => array(array('_route' => '_678'), array('a', 'b', 'c'), null, null), - 47733 => array(array('_route' => '_931'), array('a', 'b', 'c'), null, null), - 47783 => array(array('_route' => '_751'), array('a', 'b', 'c'), null, null), - 47832 => array(array('_route' => '_766'), array('a', 'b', 'c'), null, null), - 47884 => array(array('_route' => '_792'), array('a', 'b', 'c'), null, null), - 47932 => array(array('_route' => '_814'), array('a', 'b', 'c'), null, null), - 47982 => array(array('_route' => '_798'), array('a', 'b', 'c'), null, null), - 48034 => array(array('_route' => '_851'), array('a', 'b', 'c'), null, null), - 48082 => array(array('_route' => '_941'), array('a', 'b', 'c'), null, null), - 48130 => array(array('_route' => '_953'), array('a', 'b', 'c'), null, null), - 48178 => array(array('_route' => '_975'), array('a', 'b', 'c'), null, null), - 48228 => array(array('_route' => '_873'), array('a', 'b', 'c'), null, null), - 48277 => array(array('_route' => '_936'), array('a', 'b', 'c'), null, null), - 48326 => array(array('_route' => '_994'), array('a', 'b', 'c'), null, null), - 48384 => array(array('_route' => '_562'), array('a', 'b', 'c'), null, null), - 48432 => array(array('_route' => '_770'), array('a', 'b', 'c'), null, null), - 48483 => array(array('_route' => '_774'), array('a', 'b', 'c'), null, null), - 48530 => array(array('_route' => '_966'), array('a', 'b', 'c'), null, null), - 48581 => array(array('_route' => '_582'), array('a', 'b', 'c'), null, null), - 48633 => array(array('_route' => '_606'), array('a', 'b', 'c'), null, null), - 48681 => array(array('_route' => '_648'), array('a', 'b', 'c'), null, null), - 48731 => array(array('_route' => '_624'), array('a', 'b', 'c'), null, null), - 48783 => array(array('_route' => '_626'), array('a', 'b', 'c'), null, null), - 48831 => array(array('_route' => '_821'), array('a', 'b', 'c'), null, null), - 48881 => array(array('_route' => '_628'), array('a', 'b', 'c'), null, null), - 48930 => array(array('_route' => '_638'), array('a', 'b', 'c'), null, null), - 48982 => array(array('_route' => '_640'), array('a', 'b', 'c'), null, null), - 49030 => array(array('_route' => '_990'), array('a', 'b', 'c'), null, null), - 49080 => array(array('_route' => '_705'), array('a', 'b', 'c'), null, null), - 49129 => array(array('_route' => '_757'), array('a', 'b', 'c'), null, null), - 49184 => array(array('_route' => '_785'), array('a', 'b', 'c'), null, null), - 49231 => array(array('_route' => '_875'), array('a', 'b', 'c'), null, null), - 49278 => array(array('_route' => '_894'), array('a', 'b', 'c'), null, null), - 49327 => array(array('_route' => '_945'), array('a', 'b', 'c'), null, null), - 49383 => array(array('_route' => '_816'), array('a', 'b', 'c'), null, null), - 49430 => array(array('_route' => '_872'), array('a', 'b', 'c'), null, null), - 49479 => array(array('_route' => '_921'), array('a', 'b', 'c'), null, null), - 49527 => array(array('_route' => '_960'), array('a', 'b', 'c'), null, null), - 49575 => array(array('_route' => '_974'), array('a', 'b', 'c'), null, null), - 49628 => array(array('_route' => '_835'), array('a', 'b', 'c'), null, null), - 49676 => array(array('_route' => '_934'), array('a', 'b', 'c'), null, null), - 49726 => array(array('_route' => '_869'), array('a', 'b', 'c'), null, null), + 24837 => array(array('_route' => '_501'), array('a', 'b', 'c'), null, null), + 24889 => array(array('_route' => '_514'), array('a', 'b', 'c'), null, null), + 24937 => array(array('_route' => '_731'), array('a', 'b', 'c'), null, null), + 24990 => array(array('_route' => '_522'), array('a', 'b', 'c'), null, null), + 25038 => array(array('_route' => '_693'), array('a', 'b', 'c'), null, null), + 25091 => array(array('_route' => '_537'), array('a', 'b', 'c'), null, null), + 25139 => array(array('_route' => '_554'), array('a', 'b', 'c'), null, null), + 25187 => array(array('_route' => '_645'), array('a', 'b', 'c'), null, null), + 25235 => array(array('_route' => '_862'), array('a', 'b', 'c'), null, null), + 25288 => array(array('_route' => '_539'), array('a', 'b', 'c'), null, null), + 25336 => array(array('_route' => '_729'), array('a', 'b', 'c'), null, null), + 25384 => array(array('_route' => '_897'), array('a', 'b', 'c'), null, null), + 25437 => array(array('_route' => '_561'), array('a', 'b', 'c'), null, null), + 25485 => array(array('_route' => '_615'), array('a', 'b', 'c'), null, null), + 25533 => array(array('_route' => '_764'), array('a', 'b', 'c'), null, null), + 25581 => array(array('_route' => '_948'), array('a', 'b', 'c'), null, null), + 25634 => array(array('_route' => '_617'), array('a', 'b', 'c'), null, null), + 25682 => array(array('_route' => '_671'), array('a', 'b', 'c'), null, null), + 25735 => array(array('_route' => '_649'), array('a', 'b', 'c'), null, null), + 25783 => array(array('_route' => '_651'), array('a', 'b', 'c'), null, null), + 25831 => array(array('_route' => '_684'), array('a', 'b', 'c'), null, null), + 25884 => array(array('_route' => '_669'), array('a', 'b', 'c'), null, null), + 25932 => array(array('_route' => '_743'), array('a', 'b', 'c'), null, null), + 25980 => array(array('_route' => '_962'), array('a', 'b', 'c'), null, null), + 26033 => array(array('_route' => '_694'), array('a', 'b', 'c'), null, null), + 26081 => array(array('_route' => '_985'), array('a', 'b', 'c'), null, null), + 26134 => array(array('_route' => '_707'), array('a', 'b', 'c'), null, null), + 26182 => array(array('_route' => '_718'), array('a', 'b', 'c'), null, null), + 26235 => array(array('_route' => '_720'), array('a', 'b', 'c'), null, null), + 26283 => array(array('_route' => '_745'), array('a', 'b', 'c'), null, null), + 26333 => array(array('_route' => '_874'), array('a', 'b', 'c'), null, null), + 26391 => array(array('_route' => '_502'), array('a', 'b', 'c'), null, null), + 26439 => array(array('_route' => '_667'), array('a', 'b', 'c'), null, null), + 26487 => array(array('_route' => '_911'), array('a', 'b', 'c'), null, null), + 26535 => array(array('_route' => '_942'), array('a', 'b', 'c'), null, null), + 26585 => array(array('_route' => '_504'), array('a', 'b', 'c'), null, null), + 26637 => array(array('_route' => '_524'), array('a', 'b', 'c'), null, null), + 26685 => array(array('_route' => '_732'), array('a', 'b', 'c'), null, null), + 26738 => array(array('_route' => '_596'), array('a', 'b', 'c'), null, null), + 26786 => array(array('_route' => '_601'), array('a', 'b', 'c'), null, null), + 26839 => array(array('_route' => '_620'), array('a', 'b', 'c'), null, null), + 26887 => array(array('_route' => '_631'), array('a', 'b', 'c'), null, null), + 26935 => array(array('_route' => '_771'), array('a', 'b', 'c'), null, null), + 26983 => array(array('_route' => '_937'), array('a', 'b', 'c'), null, null), + 27031 => array(array('_route' => '_999'), array('a', 'b', 'c'), null, null), + 27084 => array(array('_route' => '_657'), array('a', 'b', 'c'), null, null), + 27132 => array(array('_route' => '_701'), array('a', 'b', 'c'), null, null), + 27185 => array(array('_route' => '_662'), array('a', 'b', 'c'), null, null), + 27233 => array(array('_route' => '_797'), array('a', 'b', 'c'), null, null), + 27281 => array(array('_route' => '_924'), array('a', 'b', 'c'), null, null), + 27334 => array(array('_route' => '_702'), array('a', 'b', 'c'), null, null), + 27382 => array(array('_route' => '_750'), array('a', 'b', 'c'), null, null), + 27435 => array(array('_route' => '_749'), array('a', 'b', 'c'), null, null), + 27483 => array(array('_route' => '_837'), array('a', 'b', 'c'), null, null), + 27533 => array(array('_route' => '_758'), array('a', 'b', 'c'), null, null), + 27585 => array(array('_route' => '_810'), array('a', 'b', 'c'), null, null), + 27633 => array(array('_route' => '_902'), array('a', 'b', 'c'), null, null), + 27683 => array(array('_route' => '_845'), array('a', 'b', 'c'), null, null), + 27741 => array(array('_route' => '_503'), array('a', 'b', 'c'), null, null), + 27792 => array(array('_route' => '_756'), array('a', 'b', 'c'), null, null), + 27839 => array(array('_route' => '_799'), array('a', 'b', 'c'), null, null), + 27888 => array(array('_route' => '_769'), array('a', 'b', 'c'), null, null), + 27936 => array(array('_route' => '_981'), array('a', 'b', 'c'), null, null), + 27989 => array(array('_route' => '_507'), array('a', 'b', 'c'), null, null), + 28037 => array(array('_route' => '_672'), array('a', 'b', 'c'), null, null), + 28085 => array(array('_route' => '_790'), array('a', 'b', 'c'), null, null), + 28138 => array(array('_route' => '_515'), array('a', 'b', 'c'), null, null), + 28186 => array(array('_route' => '_523'), array('a', 'b', 'c'), null, null), + 28234 => array(array('_route' => '_957'), array('a', 'b', 'c'), null, null), + 28282 => array(array('_route' => '_995'), array('a', 'b', 'c'), null, null), + 28335 => array(array('_route' => '_532'), array('a', 'b', 'c'), null, null), + 28383 => array(array('_route' => '_642'), array('a', 'b', 'c'), null, null), + 28433 => array(array('_route' => '_579'), array('a', 'b', 'c'), null, null), + 28485 => array(array('_route' => '_625'), array('a', 'b', 'c'), null, null), + 28533 => array(array('_route' => '_916'), array('a', 'b', 'c'), null, null), + 28586 => array(array('_route' => '_633'), array('a', 'b', 'c'), null, null), + 28634 => array(array('_route' => '_656'), array('a', 'b', 'c'), null, null), + 28687 => array(array('_route' => '_658'), array('a', 'b', 'c'), null, null), + 28735 => array(array('_route' => '_943'), array('a', 'b', 'c'), null, null), + 28788 => array(array('_route' => '_664'), array('a', 'b', 'c'), null, null), + 28836 => array(array('_route' => '_852'), array('a', 'b', 'c'), null, null), + 28884 => array(array('_route' => '_870'), array('a', 'b', 'c'), null, null), + 28937 => array(array('_route' => '_683'), array('a', 'b', 'c'), null, null), + 28985 => array(array('_route' => '_915'), array('a', 'b', 'c'), null, null), + 29038 => array(array('_route' => '_719'), array('a', 'b', 'c'), null, null), + 29086 => array(array('_route' => '_859'), array('a', 'b', 'c'), null, null), + 29134 => array(array('_route' => '_912'), array('a', 'b', 'c'), null, null), + 29182 => array(array('_route' => '_978'), array('a', 'b', 'c'), null, null), + 29235 => array(array('_route' => '_738'), array('a', 'b', 'c'), null, null), + 29283 => array(array('_route' => '_883'), array('a', 'b', 'c'), null, null), + 29333 => array(array('_route' => '_741'), array('a', 'b', 'c'), null, null), + 29382 => array(array('_route' => '_760'), array('a', 'b', 'c'), null, null), + 29431 => array(array('_route' => '_895'), array('a', 'b', 'c'), null, null), + 29489 => array(array('_route' => '_505'), array('a', 'b', 'c'), null, null), + 29537 => array(array('_route' => '_935'), array('a', 'b', 'c'), null, null), + 29590 => array(array('_route' => '_509'), array('a', 'b', 'c'), null, null), + 29638 => array(array('_route' => '_820'), array('a', 'b', 'c'), null, null), + 29686 => array(array('_route' => '_910'), array('a', 'b', 'c'), null, null), + 29739 => array(array('_route' => '_518'), array('a', 'b', 'c'), null, null), + 29787 => array(array('_route' => '_618'), array('a', 'b', 'c'), null, null), + 29840 => array(array('_route' => '_546'), array('a', 'b', 'c'), null, null), + 29888 => array(array('_route' => '_740'), array('a', 'b', 'c'), null, null), + 29936 => array(array('_route' => '_867'), array('a', 'b', 'c'), null, null), + 29989 => array(array('_route' => '_572'), array('a', 'b', 'c'), null, null), + 30037 => array(array('_route' => '_952'), array('a', 'b', 'c'), null, null), + 30090 => array(array('_route' => '_573'), array('a', 'b', 'c'), null, null), + 30138 => array(array('_route' => '_692'), array('a', 'b', 'c'), null, null), + 30186 => array(array('_route' => '_700'), array('a', 'b', 'c'), null, null), + 30234 => array(array('_route' => '_772'), array('a', 'b', 'c'), null, null), + 30284 => array(array('_route' => '_653'), array('a', 'b', 'c'), null, null), + 30336 => array(array('_route' => '_695'), array('a', 'b', 'c'), null, null), + 30384 => array(array('_route' => '_748'), array('a', 'b', 'c'), null, null), + 30437 => array(array('_route' => '_710'), array('a', 'b', 'c'), null, null), + 30485 => array(array('_route' => '_716'), array('a', 'b', 'c'), null, null), + 30533 => array(array('_route' => '_969'), array('a', 'b', 'c'), null, null), + 30586 => array(array('_route' => '_734'), array('a', 'b', 'c'), null, null), + 30634 => array(array('_route' => '_742'), array('a', 'b', 'c'), null, null), + 30682 => array(array('_route' => '_844'), array('a', 'b', 'c'), null, null), + 30735 => array(array('_route' => '_763'), array('a', 'b', 'c'), null, null), + 30783 => array(array('_route' => '_965'), array('a', 'b', 'c'), null, null), + 30836 => array(array('_route' => '_778'), array('a', 'b', 'c'), null, null), + 30884 => array(array('_route' => '_813'), array('a', 'b', 'c'), null, null), + 30932 => array(array('_route' => '_831'), array('a', 'b', 'c'), null, null), + 30982 => array(array('_route' => '_955'), array('a', 'b', 'c'), null, null), + 31031 => array(array('_route' => '_997'), array('a', 'b', 'c'), null, null), + 31089 => array(array('_route' => '_506'), array('a', 'b', 'c'), null, null), + 31137 => array(array('_route' => '_575'), array('a', 'b', 'c'), null, null), + 31190 => array(array('_route' => '_516'), array('a', 'b', 'c'), null, null), + 31238 => array(array('_route' => '_553'), array('a', 'b', 'c'), null, null), + 31291 => array(array('_route' => '_528'), array('a', 'b', 'c'), null, null), + 31339 => array(array('_route' => '_847'), array('a', 'b', 'c'), null, null), + 31387 => array(array('_route' => '_904'), array('a', 'b', 'c'), null, null), + 31440 => array(array('_route' => '_574'), array('a', 'b', 'c'), null, null), + 31488 => array(array('_route' => '_818'), array('a', 'b', 'c'), null, null), + 31538 => array(array('_route' => '_577'), array('a', 'b', 'c'), null, null), + 31590 => array(array('_route' => '_584'), array('a', 'b', 'c'), null, null), + 31638 => array(array('_route' => '_905'), array('a', 'b', 'c'), null, null), + 31691 => array(array('_route' => '_612'), array('a', 'b', 'c'), null, null), + 31739 => array(array('_route' => '_688'), array('a', 'b', 'c'), null, null), + 31787 => array(array('_route' => '_854'), array('a', 'b', 'c'), null, null), + 31840 => array(array('_route' => '_613'), array('a', 'b', 'c'), null, null), + 31888 => array(array('_route' => '_767'), array('a', 'b', 'c'), null, null), + 31941 => array(array('_route' => '_666'), array('a', 'b', 'c'), null, null), + 31989 => array(array('_route' => '_759'), array('a', 'b', 'c'), null, null), + 32037 => array(array('_route' => '_827'), array('a', 'b', 'c'), null, null), + 32085 => array(array('_route' => '_840'), array('a', 'b', 'c'), null, null), + 32138 => array(array('_route' => '_680'), array('a', 'b', 'c'), null, null), + 32186 => array(array('_route' => '_784'), array('a', 'b', 'c'), null, null), + 32234 => array(array('_route' => '_842'), array('a', 'b', 'c'), null, null), + 32282 => array(array('_route' => '_860'), array('a', 'b', 'c'), null, null), + 32332 => array(array('_route' => '_704'), array('a', 'b', 'c'), null, null), + 32381 => array(array('_route' => '_727'), array('a', 'b', 'c'), null, null), + 32430 => array(array('_route' => '_777'), array('a', 'b', 'c'), null, null), + 32482 => array(array('_route' => '_838'), array('a', 'b', 'c'), null, null), + 32530 => array(array('_route' => '_861'), array('a', 'b', 'c'), null, null), + 32583 => array(array('_route' => '_849'), array('a', 'b', 'c'), null, null), + 32631 => array(array('_route' => '_982'), array('a', 'b', 'c'), null, null), + 32679 => array(array('_route' => '_986'), array('a', 'b', 'c'), null, null), + 32741 => array(array('_route' => '_508'), array('a', 'b', 'c'), null, null), + 32788 => array(array('_route' => '_517'), array('a', 'b', 'c'), null, null), + 32837 => array(array('_route' => '_622'), array('a', 'b', 'c'), null, null), + 32890 => array(array('_route' => '_513'), array('a', 'b', 'c'), null, null), + 32938 => array(array('_route' => '_655'), array('a', 'b', 'c'), null, null), + 32986 => array(array('_route' => '_843'), array('a', 'b', 'c'), null, null), + 33034 => array(array('_route' => '_939'), array('a', 'b', 'c'), null, null), + 33084 => array(array('_route' => '_529'), array('a', 'b', 'c'), null, null), + 33136 => array(array('_route' => '_535'), array('a', 'b', 'c'), null, null), + 33184 => array(array('_route' => '_685'), array('a', 'b', 'c'), null, null), + 33240 => array(array('_route' => '_559'), array('a', 'b', 'c'), null, null), + 33287 => array(array('_route' => '_661'), array('a', 'b', 'c'), null, null), + 33336 => array(array('_route' => '_768'), array('a', 'b', 'c'), null, null), + 33389 => array(array('_route' => '_589'), array('a', 'b', 'c'), null, null), + 33437 => array(array('_route' => '_647'), array('a', 'b', 'c'), null, null), + 33485 => array(array('_route' => '_652'), array('a', 'b', 'c'), null, null), + 33533 => array(array('_route' => '_834'), array('a', 'b', 'c'), null, null), + 33586 => array(array('_route' => '_591'), array('a', 'b', 'c'), null, null), + 33634 => array(array('_route' => '_599'), array('a', 'b', 'c'), null, null), + 33687 => array(array('_route' => '_787'), array('a', 'b', 'c'), null, null), + 33734 => array(array('_route' => '_848'), array('a', 'b', 'c'), null, null), + 33787 => array(array('_route' => '_796'), array('a', 'b', 'c'), null, null), + 33835 => array(array('_route' => '_877'), array('a', 'b', 'c'), null, null), + 33885 => array(array('_route' => '_809'), array('a', 'b', 'c'), null, null), + 33934 => array(array('_route' => '_817'), array('a', 'b', 'c'), null, null), + 33986 => array(array('_route' => '_819'), array('a', 'b', 'c'), null, null), + 34034 => array(array('_route' => '_865'), array('a', 'b', 'c'), null, null), + 34084 => array(array('_route' => '_919'), array('a', 'b', 'c'), null, null), + 34133 => array(array('_route' => '_949'), array('a', 'b', 'c'), null, null), + 34191 => array(array('_route' => '_510'), array('a', 'b', 'c'), null, null), + 34239 => array(array('_route' => '_590'), array('a', 'b', 'c'), null, null), + 34287 => array(array('_route' => '_597'), array('a', 'b', 'c'), null, null), + 34335 => array(array('_route' => '_682'), array('a', 'b', 'c'), null, null), + 34383 => array(array('_route' => '_723'), array('a', 'b', 'c'), null, null), + 34436 => array(array('_route' => '_521'), array('a', 'b', 'c'), null, null), + 34484 => array(array('_route' => '_594'), array('a', 'b', 'c'), null, null), + 34532 => array(array('_route' => '_689'), array('a', 'b', 'c'), null, null), + 34580 => array(array('_route' => '_713'), array('a', 'b', 'c'), null, null), + 34628 => array(array('_route' => '_889'), array('a', 'b', 'c'), null, null), + 34681 => array(array('_route' => '_531'), array('a', 'b', 'c'), null, null), + 34729 => array(array('_route' => '_639'), array('a', 'b', 'c'), null, null), + 34780 => array(array('_route' => '_646'), array('a', 'b', 'c'), null, null), + 34827 => array(array('_route' => '_659'), array('a', 'b', 'c'), null, null), + 34876 => array(array('_route' => '_959'), array('a', 'b', 'c'), null, null), + 34929 => array(array('_route' => '_550'), array('a', 'b', 'c'), null, null), + 34977 => array(array('_route' => '_833'), array('a', 'b', 'c'), null, null), + 35025 => array(array('_route' => '_899'), array('a', 'b', 'c'), null, null), + 35081 => array(array('_route' => '_580'), array('a', 'b', 'c'), null, null), + 35128 => array(array('_route' => '_762'), array('a', 'b', 'c'), null, null), + 35177 => array(array('_route' => '_896'), array('a', 'b', 'c'), null, null), + 35230 => array(array('_route' => '_595'), array('a', 'b', 'c'), null, null), + 35278 => array(array('_route' => '_933'), array('a', 'b', 'c'), null, null), + 35328 => array(array('_route' => '_610'), array('a', 'b', 'c'), null, null), + 35380 => array(array('_route' => '_629'), array('a', 'b', 'c'), null, null), + 35428 => array(array('_route' => '_744'), array('a', 'b', 'c'), null, null), + 35481 => array(array('_route' => '_674'), array('a', 'b', 'c'), null, null), + 35529 => array(array('_route' => '_726'), array('a', 'b', 'c'), null, null), + 35577 => array(array('_route' => '_929'), array('a', 'b', 'c'), null, null), + 35627 => array(array('_route' => '_696'), array('a', 'b', 'c'), null, null), + 35679 => array(array('_route' => '_841'), array('a', 'b', 'c'), null, null), + 35727 => array(array('_route' => '_890'), array('a', 'b', 'c'), null, null), + 35777 => array(array('_route' => '_885'), array('a', 'b', 'c'), null, null), + 35826 => array(array('_route' => '_888'), array('a', 'b', 'c'), null, null), + 35875 => array(array('_route' => '_996'), array('a', 'b', 'c'), null, null), + 35933 => array(array('_route' => '_511'), array('a', 'b', 'c'), null, null), + 35981 => array(array('_route' => '_576'), array('a', 'b', 'c'), null, null), + 36029 => array(array('_route' => '_623'), array('a', 'b', 'c'), null, null), + 36082 => array(array('_route' => '_560'), array('a', 'b', 'c'), null, null), + 36129 => array(array('_route' => '_585'), array('a', 'b', 'c'), null, null), + 36182 => array(array('_route' => '_570'), array('a', 'b', 'c'), null, null), + 36230 => array(array('_route' => '_578'), array('a', 'b', 'c'), null, null), + 36281 => array(array('_route' => '_780'), array('a', 'b', 'c'), null, null), + 36328 => array(array('_route' => '_808'), array('a', 'b', 'c'), null, null), + 36382 => array(array('_route' => '_593'), array('a', 'b', 'c'), null, null), + 36430 => array(array('_route' => '_900'), array('a', 'b', 'c'), null, null), + 36483 => array(array('_route' => '_632'), array('a', 'b', 'c'), null, null), + 36531 => array(array('_route' => '_654'), array('a', 'b', 'c'), null, null), + 36579 => array(array('_route' => '_721'), array('a', 'b', 'c'), null, null), + 36627 => array(array('_route' => '_836'), array('a', 'b', 'c'), null, null), + 36680 => array(array('_route' => '_637'), array('a', 'b', 'c'), null, null), + 36728 => array(array('_route' => '_737'), array('a', 'b', 'c'), null, null), + 36784 => array(array('_route' => '_699'), array('a', 'b', 'c'), null, null), + 36831 => array(array('_route' => '_822'), array('a', 'b', 'c'), null, null), + 36880 => array(array('_route' => '_853'), array('a', 'b', 'c'), null, null), + 36933 => array(array('_route' => '_708'), array('a', 'b', 'c'), null, null), + 36981 => array(array('_route' => '_871'), array('a', 'b', 'c'), null, null), + 37034 => array(array('_route' => '_752'), array('a', 'b', 'c'), null, null), + 37082 => array(array('_route' => '_989'), array('a', 'b', 'c'), null, null), + 37132 => array(array('_route' => '_855'), array('a', 'b', 'c'), null, null), + 37184 => array(array('_route' => '_858'), array('a', 'b', 'c'), null, null), + 37232 => array(array('_route' => '_898'), array('a', 'b', 'c'), null, null), + 37282 => array(array('_route' => '_903'), array('a', 'b', 'c'), null, null), + 37331 => array(array('_route' => '_909'), array('a', 'b', 'c'), null, null), + 37380 => array(array('_route' => '_950'), array('a', 'b', 'c'), null, null), + 37441 => array(array('_route' => '_512'), array('a', 'b', 'c'), null, null), + 37488 => array(array('_route' => '_691'), array('a', 'b', 'c'), null, null), + 37537 => array(array('_route' => '_686'), array('a', 'b', 'c'), null, null), + 37587 => array(array('_route' => '_527'), array('a', 'b', 'c'), null, null), + 37639 => array(array('_route' => '_541'), array('a', 'b', 'c'), null, null), + 37687 => array(array('_route' => '_956'), array('a', 'b', 'c'), null, null), + 37740 => array(array('_route' => '_555'), array('a', 'b', 'c'), null, null), + 37788 => array(array('_route' => '_681'), array('a', 'b', 'c'), null, null), + 37841 => array(array('_route' => '_556'), array('a', 'b', 'c'), null, null), + 37889 => array(array('_route' => '_802'), array('a', 'b', 'c'), null, null), + 37939 => array(array('_route' => '_558'), array('a', 'b', 'c'), null, null), + 37991 => array(array('_route' => '_564'), array('a', 'b', 'c'), null, null), + 38039 => array(array('_route' => '_670'), array('a', 'b', 'c'), null, null), + 38087 => array(array('_route' => '_884'), array('a', 'b', 'c'), null, null), + 38140 => array(array('_route' => '_627'), array('a', 'b', 'c'), null, null), + 38187 => array(array('_route' => '_746'), array('a', 'b', 'c'), null, null), + 38240 => array(array('_route' => '_668'), array('a', 'b', 'c'), null, null), + 38291 => array(array('_route' => '_712'), array('a', 'b', 'c'), null, null), + 38338 => array(array('_route' => '_863'), array('a', 'b', 'c'), null, null), + 38387 => array(array('_route' => '_801'), array('a', 'b', 'c'), null, null), + 38440 => array(array('_route' => '_709'), array('a', 'b', 'c'), null, null), + 38488 => array(array('_route' => '_850'), array('a', 'b', 'c'), null, null), + 38536 => array(array('_route' => '_918'), array('a', 'b', 'c'), null, null), + 38586 => array(array('_route' => '_803'), array('a', 'b', 'c'), null, null), + 38638 => array(array('_route' => '_864'), array('a', 'b', 'c'), null, null), + 38686 => array(array('_route' => '_880'), array('a', 'b', 'c'), null, null), + 38734 => array(array('_route' => '_927'), array('a', 'b', 'c'), null, null), + 38787 => array(array('_route' => '_930'), array('a', 'b', 'c'), null, null), + 38835 => array(array('_route' => '_951'), array('a', 'b', 'c'), null, null), + 38883 => array(array('_route' => '_963'), array('a', 'b', 'c'), null, null), + 38942 => array(array('_route' => '_519'), array('a', 'b', 'c'), null, null), + 38990 => array(array('_route' => '_823'), array('a', 'b', 'c'), null, null), + 39038 => array(array('_route' => '_954'), array('a', 'b', 'c'), null, null), + 39091 => array(array('_route' => '_525'), array('a', 'b', 'c'), null, null), + 39139 => array(array('_route' => '_991'), array('a', 'b', 'c'), null, null), + 39189 => array(array('_route' => '_536'), array('a', 'b', 'c'), null, null), + 39241 => array(array('_route' => '_545'), array('a', 'b', 'c'), null, null), + 39289 => array(array('_route' => '_944'), array('a', 'b', 'c'), null, null), + 39342 => array(array('_route' => '_557'), array('a', 'b', 'c'), null, null), + 39390 => array(array('_route' => '_783'), array('a', 'b', 'c'), null, null), + 39438 => array(array('_route' => '_807'), array('a', 'b', 'c'), null, null), + 39491 => array(array('_route' => '_586'), array('a', 'b', 'c'), null, null), + 39539 => array(array('_route' => '_711'), array('a', 'b', 'c'), null, null), + 39592 => array(array('_route' => '_598'), array('a', 'b', 'c'), null, null), + 39640 => array(array('_route' => '_635'), array('a', 'b', 'c'), null, null), + 39688 => array(array('_route' => '_983'), array('a', 'b', 'c'), null, null), + 39741 => array(array('_route' => '_634'), array('a', 'b', 'c'), null, null), + 39789 => array(array('_route' => '_641'), array('a', 'b', 'c'), null, null), + 39840 => array(array('_route' => '_779'), array('a', 'b', 'c'), null, null), + 39887 => array(array('_route' => '_876'), array('a', 'b', 'c'), null, null), + 39936 => array(array('_route' => '_811'), array('a', 'b', 'c'), null, null), + 39984 => array(array('_route' => '_824'), array('a', 'b', 'c'), null, null), + 40037 => array(array('_route' => '_660'), array('a', 'b', 'c'), null, null), + 40085 => array(array('_route' => '_789'), array('a', 'b', 'c'), null, null), + 40138 => array(array('_route' => '_733'), array('a', 'b', 'c'), null, null), + 40186 => array(array('_route' => '_735'), array('a', 'b', 'c'), null, null), + 40234 => array(array('_route' => '_882'), array('a', 'b', 'c'), null, null), + 40282 => array(array('_route' => '_967'), array('a', 'b', 'c'), null, null), + 40332 => array(array('_route' => '_736'), array('a', 'b', 'c'), null, null), + 40381 => array(array('_route' => '_753'), array('a', 'b', 'c'), null, null), + 40430 => array(array('_route' => '_786'), array('a', 'b', 'c'), null, null), + 40479 => array(array('_route' => '_907'), array('a', 'b', 'c'), null, null), + 40528 => array(array('_route' => '_920'), array('a', 'b', 'c'), null, null), + 40577 => array(array('_route' => '_971'), array('a', 'b', 'c'), null, null), + 40635 => array(array('_route' => '_520'), array('a', 'b', 'c'), null, null), + 40683 => array(array('_route' => '_891'), array('a', 'b', 'c'), null, null), + 40739 => array(array('_route' => '_534'), array('a', 'b', 'c'), null, null), + 40785 => array(array('_route' => '_602'), array('a', 'b', 'c'), null, null), + 40834 => array(array('_route' => '_605'), array('a', 'b', 'c'), null, null), + 40882 => array(array('_route' => '_979'), array('a', 'b', 'c'), null, null), + 40932 => array(array('_route' => '_547'), array('a', 'b', 'c'), null, null), + 40987 => array(array('_route' => '_549'), array('a', 'b', 'c'), null, null), + 41034 => array(array('_route' => '_755'), array('a', 'b', 'c'), null, null), + 41083 => array(array('_route' => '_922'), array('a', 'b', 'c'), null, null), + 41131 => array(array('_route' => '_977'), array('a', 'b', 'c'), null, null), + 41184 => array(array('_route' => '_565'), array('a', 'b', 'c'), null, null), + 41232 => array(array('_route' => '_926'), array('a', 'b', 'c'), null, null), + 41282 => array(array('_route' => '_571'), array('a', 'b', 'c'), null, null), + 41331 => array(array('_route' => '_581'), array('a', 'b', 'c'), null, null), + 41380 => array(array('_route' => '_619'), array('a', 'b', 'c'), null, null), + 41429 => array(array('_route' => '_636'), array('a', 'b', 'c'), null, null), + 41481 => array(array('_route' => '_679'), array('a', 'b', 'c'), null, null), + 41529 => array(array('_route' => '_866'), array('a', 'b', 'c'), null, null), + 41577 => array(array('_route' => '_973'), array('a', 'b', 'c'), null, null), + 41630 => array(array('_route' => '_690'), array('a', 'b', 'c'), null, null), + 41678 => array(array('_route' => '_775'), array('a', 'b', 'c'), null, null), + 41731 => array(array('_route' => '_722'), array('a', 'b', 'c'), null, null), + 41779 => array(array('_route' => '_906'), array('a', 'b', 'c'), null, null), + 41827 => array(array('_route' => '_946'), array('a', 'b', 'c'), null, null), + 41877 => array(array('_route' => '_788'), array('a', 'b', 'c'), null, null), + 41929 => array(array('_route' => '_828'), array('a', 'b', 'c'), null, null), + 41977 => array(array('_route' => '_892'), array('a', 'b', 'c'), null, null), + 42025 => array(array('_route' => '_972'), array('a', 'b', 'c'), null, null), + 42075 => array(array('_route' => '_829'), array('a', 'b', 'c'), null, null), + 42127 => array(array('_route' => '_923'), array('a', 'b', 'c'), null, null), + 42175 => array(array('_route' => '_947'), array('a', 'b', 'c'), null, null), + 42234 => array(array('_route' => '_526'), array('a', 'b', 'c'), null, null), + 42282 => array(array('_route' => '_614'), array('a', 'b', 'c'), null, null), + 42330 => array(array('_route' => '_621'), array('a', 'b', 'c'), null, null), + 42383 => array(array('_route' => '_543'), array('a', 'b', 'c'), null, null), + 42431 => array(array('_route' => '_812'), array('a', 'b', 'c'), null, null), + 42487 => array(array('_route' => '_548'), array('a', 'b', 'c'), null, null), + 42534 => array(array('_route' => '_747'), array('a', 'b', 'c'), null, null), + 42583 => array(array('_route' => '_715'), array('a', 'b', 'c'), null, null), + 42631 => array(array('_route' => '_940'), array('a', 'b', 'c'), null, null), + 42684 => array(array('_route' => '_563'), array('a', 'b', 'c'), null, null), + 42732 => array(array('_route' => '_611'), array('a', 'b', 'c'), null, null), + 42780 => array(array('_route' => '_830'), array('a', 'b', 'c'), null, null), + 42833 => array(array('_route' => '_569'), array('a', 'b', 'c'), null, null), + 42881 => array(array('_route' => '_908'), array('a', 'b', 'c'), null, null), + 42929 => array(array('_route' => '_913'), array('a', 'b', 'c'), null, null), + 42982 => array(array('_route' => '_644'), array('a', 'b', 'c'), null, null), + 43030 => array(array('_route' => '_776'), array('a', 'b', 'c'), null, null), + 43078 => array(array('_route' => '_856'), array('a', 'b', 'c'), null, null), + 43131 => array(array('_route' => '_650'), array('a', 'b', 'c'), null, null), + 43179 => array(array('_route' => '_761'), array('a', 'b', 'c'), null, null), + 43232 => array(array('_route' => '_663'), array('a', 'b', 'c'), null, null), + 43280 => array(array('_route' => '_754'), array('a', 'b', 'c'), null, null), + 43333 => array(array('_route' => '_665'), array('a', 'b', 'c'), null, null), + 43381 => array(array('_route' => '_805'), array('a', 'b', 'c'), null, null), + 43429 => array(array('_route' => '_846'), array('a', 'b', 'c'), null, null), + 43477 => array(array('_route' => '_857'), array('a', 'b', 'c'), null, null), + 43530 => array(array('_route' => '_675'), array('a', 'b', 'c'), null, null), + 43578 => array(array('_route' => '_839'), array('a', 'b', 'c'), null, null), + 43626 => array(array('_route' => '_968'), array('a', 'b', 'c'), null, null), + 43676 => array(array('_route' => '_697'), array('a', 'b', 'c'), null, null), + 43728 => array(array('_route' => '_725'), array('a', 'b', 'c'), null, null), + 43776 => array(array('_route' => '_794'), array('a', 'b', 'c'), null, null), + 43829 => array(array('_route' => '_773'), array('a', 'b', 'c'), null, null), + 43877 => array(array('_route' => '_992'), array('a', 'b', 'c'), null, null), + 43930 => array(array('_route' => '_901'), array('a', 'b', 'c'), null, null), + 43978 => array(array('_route' => '_970'), array('a', 'b', 'c'), null, null), + 44028 => array(array('_route' => '_964'), array('a', 'b', 'c'), null, null), + 44086 => array(array('_route' => '_530'), array('a', 'b', 'c'), null, null), + 44134 => array(array('_route' => '_703'), array('a', 'b', 'c'), null, null), + 44187 => array(array('_route' => '_533'), array('a', 'b', 'c'), null, null), + 44235 => array(array('_route' => '_739'), array('a', 'b', 'c'), null, null), + 44283 => array(array('_route' => '_791'), array('a', 'b', 'c'), null, null), + 44331 => array(array('_route' => '_987'), array('a', 'b', 'c'), null, null), + 44384 => array(array('_route' => '_566'), array('a', 'b', 'c'), null, null), + 44432 => array(array('_route' => '_592'), array('a', 'b', 'c'), null, null), + 44488 => array(array('_route' => '_568'), array('a', 'b', 'c'), null, null), + 44534 => array(array('_route' => '_868'), array('a', 'b', 'c'), null, null), + 44583 => array(array('_route' => '_878'), array('a', 'b', 'c'), null, null), + 44636 => array(array('_route' => '_588'), array('a', 'b', 'c'), null, null), + 44684 => array(array('_route' => '_793'), array('a', 'b', 'c'), null, null), + 44732 => array(array('_route' => '_917'), array('a', 'b', 'c'), null, null), + 44785 => array(array('_route' => '_600'), array('a', 'b', 'c'), null, null), + 44833 => array(array('_route' => '_728'), array('a', 'b', 'c'), null, null), + 44886 => array(array('_route' => '_603'), array('a', 'b', 'c'), null, null), + 44934 => array(array('_route' => '_765'), array('a', 'b', 'c'), null, null), + 44987 => array(array('_route' => '_607'), array('a', 'b', 'c'), null, null), + 45035 => array(array('_route' => '_676'), array('a', 'b', 'c'), null, null), + 45083 => array(array('_route' => '_804'), array('a', 'b', 'c'), null, null), + 45136 => array(array('_route' => '_609'), array('a', 'b', 'c'), null, null), + 45184 => array(array('_route' => '_961'), array('a', 'b', 'c'), null, null), + 45232 => array(array('_route' => '_980'), array('a', 'b', 'c'), null, null), + 45282 => array(array('_route' => '_714'), array('a', 'b', 'c'), null, null), + 45334 => array(array('_route' => '_730'), array('a', 'b', 'c'), null, null), + 45382 => array(array('_route' => '_806'), array('a', 'b', 'c'), null, null), + 45430 => array(array('_route' => '_825'), array('a', 'b', 'c'), null, null), + 45478 => array(array('_route' => '_879'), array('a', 'b', 'c'), null, null), + 45526 => array(array('_route' => '_893'), array('a', 'b', 'c'), null, null), + 45576 => array(array('_route' => '_928'), array('a', 'b', 'c'), null, null), + 45628 => array(array('_route' => '_932'), array('a', 'b', 'c'), null, null), + 45676 => array(array('_route' => '_958'), array('a', 'b', 'c'), null, null), + 45726 => array(array('_route' => '_984'), array('a', 'b', 'c'), null, null), + 45784 => array(array('_route' => '_538'), array('a', 'b', 'c'), null, null), + 45832 => array(array('_route' => '_993'), array('a', 'b', 'c'), null, null), + 45882 => array(array('_route' => '_542'), array('a', 'b', 'c'), null, null), + 45934 => array(array('_route' => '_551'), array('a', 'b', 'c'), null, null), + 45982 => array(array('_route' => '_687'), array('a', 'b', 'c'), null, null), + 46030 => array(array('_route' => '_724'), array('a', 'b', 'c'), null, null), + 46078 => array(array('_route' => '_925'), array('a', 'b', 'c'), null, null), + 46131 => array(array('_route' => '_587'), array('a', 'b', 'c'), null, null), + 46179 => array(array('_route' => '_914'), array('a', 'b', 'c'), null, null), + 46229 => array(array('_route' => '_616'), array('a', 'b', 'c'), null, null), + 46284 => array(array('_route' => '_677'), array('a', 'b', 'c'), null, null), + 46331 => array(array('_route' => '_815'), array('a', 'b', 'c'), null, null), + 46380 => array(array('_route' => '_781'), array('a', 'b', 'c'), null, null), + 46430 => array(array('_route' => '_717'), array('a', 'b', 'c'), null, null), + 46482 => array(array('_route' => '_782'), array('a', 'b', 'c'), null, null), + 46530 => array(array('_route' => '_832'), array('a', 'b', 'c'), null, null), + 46583 => array(array('_route' => '_795'), array('a', 'b', 'c'), null, null), + 46631 => array(array('_route' => '_887'), array('a', 'b', 'c'), null, null), + 46681 => array(array('_route' => '_800'), array('a', 'b', 'c'), null, null), + 46730 => array(array('_route' => '_826'), array('a', 'b', 'c'), null, null), + 46779 => array(array('_route' => '_881'), array('a', 'b', 'c'), null, null), + 46828 => array(array('_route' => '_886'), array('a', 'b', 'c'), null, null), + 46877 => array(array('_route' => '_938'), array('a', 'b', 'c'), null, null), + 46935 => array(array('_route' => '_540'), array('a', 'b', 'c'), null, null), + 46983 => array(array('_route' => '_643'), array('a', 'b', 'c'), null, null), + 47033 => array(array('_route' => '_544'), array('a', 'b', 'c'), null, null), + 47082 => array(array('_route' => '_552'), array('a', 'b', 'c'), null, null), + 47134 => array(array('_route' => '_567'), array('a', 'b', 'c'), null, null), + 47182 => array(array('_route' => '_608'), array('a', 'b', 'c'), null, null), + 47230 => array(array('_route' => '_698'), array('a', 'b', 'c'), null, null), + 47278 => array(array('_route' => '_988'), array('a', 'b', 'c'), null, null), + 47331 => array(array('_route' => '_583'), array('a', 'b', 'c'), null, null), + 47379 => array(array('_route' => '_998'), array('a', 'b', 'c'), null, null), + 47432 => array(array('_route' => '_604'), array('a', 'b', 'c'), null, null), + 47480 => array(array('_route' => '_630'), array('a', 'b', 'c'), null, null), + 47528 => array(array('_route' => '_706'), array('a', 'b', 'c'), null, null), + 47576 => array(array('_route' => '_976'), array('a', 'b', 'c'), null, null), + 47629 => array(array('_route' => '_673'), array('a', 'b', 'c'), null, null), + 47677 => array(array('_route' => '_678'), array('a', 'b', 'c'), null, null), + 47725 => array(array('_route' => '_931'), array('a', 'b', 'c'), null, null), + 47775 => array(array('_route' => '_751'), array('a', 'b', 'c'), null, null), + 47824 => array(array('_route' => '_766'), array('a', 'b', 'c'), null, null), + 47876 => array(array('_route' => '_792'), array('a', 'b', 'c'), null, null), + 47924 => array(array('_route' => '_814'), array('a', 'b', 'c'), null, null), + 47974 => array(array('_route' => '_798'), array('a', 'b', 'c'), null, null), + 48026 => array(array('_route' => '_851'), array('a', 'b', 'c'), null, null), + 48074 => array(array('_route' => '_941'), array('a', 'b', 'c'), null, null), + 48122 => array(array('_route' => '_953'), array('a', 'b', 'c'), null, null), + 48170 => array(array('_route' => '_975'), array('a', 'b', 'c'), null, null), + 48220 => array(array('_route' => '_873'), array('a', 'b', 'c'), null, null), + 48269 => array(array('_route' => '_936'), array('a', 'b', 'c'), null, null), + 48318 => array(array('_route' => '_994'), array('a', 'b', 'c'), null, null), + 48376 => array(array('_route' => '_562'), array('a', 'b', 'c'), null, null), + 48424 => array(array('_route' => '_770'), array('a', 'b', 'c'), null, null), + 48475 => array(array('_route' => '_774'), array('a', 'b', 'c'), null, null), + 48522 => array(array('_route' => '_966'), array('a', 'b', 'c'), null, null), + 48573 => array(array('_route' => '_582'), array('a', 'b', 'c'), null, null), + 48625 => array(array('_route' => '_606'), array('a', 'b', 'c'), null, null), + 48673 => array(array('_route' => '_648'), array('a', 'b', 'c'), null, null), + 48723 => array(array('_route' => '_624'), array('a', 'b', 'c'), null, null), + 48775 => array(array('_route' => '_626'), array('a', 'b', 'c'), null, null), + 48823 => array(array('_route' => '_821'), array('a', 'b', 'c'), null, null), + 48873 => array(array('_route' => '_628'), array('a', 'b', 'c'), null, null), + 48922 => array(array('_route' => '_638'), array('a', 'b', 'c'), null, null), + 48974 => array(array('_route' => '_640'), array('a', 'b', 'c'), null, null), + 49022 => array(array('_route' => '_990'), array('a', 'b', 'c'), null, null), + 49072 => array(array('_route' => '_705'), array('a', 'b', 'c'), null, null), + 49121 => array(array('_route' => '_757'), array('a', 'b', 'c'), null, null), + 49176 => array(array('_route' => '_785'), array('a', 'b', 'c'), null, null), + 49223 => array(array('_route' => '_875'), array('a', 'b', 'c'), null, null), + 49270 => array(array('_route' => '_894'), array('a', 'b', 'c'), null, null), + 49319 => array(array('_route' => '_945'), array('a', 'b', 'c'), null, null), + 49375 => array(array('_route' => '_816'), array('a', 'b', 'c'), null, null), + 49422 => array(array('_route' => '_872'), array('a', 'b', 'c'), null, null), + 49471 => array(array('_route' => '_921'), array('a', 'b', 'c'), null, null), + 49519 => array(array('_route' => '_960'), array('a', 'b', 'c'), null, null), + 49567 => array(array('_route' => '_974'), array('a', 'b', 'c'), null, null), + 49620 => array(array('_route' => '_835'), array('a', 'b', 'c'), null, null), + 49668 => array(array('_route' => '_934'), array('a', 'b', 'c'), null, null), + 49718 => array(array('_route' => '_869'), array('a', 'b', 'c'), null, null), ); list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m]; @@ -2814,7 +2814,7 @@ public function match($rawPathinfo) return $ret; } - if (49726 === $m) { + if (49718 === $m) { break; } $regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m)); diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php index 7571aa75d1d3f..02f6ac949eb20 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher12.php @@ -29,13 +29,21 @@ public function match($rawPathinfo) $matchedPathinfo = $pathinfo; $regexList = array( 0 => '{^(?' - .'|/abc(?' - .'|([^/]++)/1(*:24)' - .'|([^/]++)/2(*:41)' - .'|([^/]++)/10(*:59)' - .'|([^/]++)/20(*:77)' - .'|([^/]++)/100(*:96)' - .'|([^/]++)/200(*:115)' + .'|/abc([^/]++)/(?' + .'|1(?' + .'|(*:27)' + .'|0(?' + .'|(*:38)' + .'|0(*:46)' + .')' + .')' + .'|2(?' + .'|(*:59)' + .'|0(?' + .'|(*:70)' + .'|0(*:78)' + .')' + .')' .')' .')$}sD', ); @@ -45,12 +53,12 @@ public function match($rawPathinfo) switch ($m = (int) $matches['MARK']) { default: $routes = array( - 24 => array(array('_route' => 'r1'), array('foo'), null, null), - 41 => array(array('_route' => 'r2'), array('foo'), null, null), - 59 => array(array('_route' => 'r10'), array('foo'), null, null), - 77 => array(array('_route' => 'r20'), array('foo'), null, null), - 96 => array(array('_route' => 'r100'), array('foo'), null, null), - 115 => array(array('_route' => 'r200'), array('foo'), null, null), + 27 => array(array('_route' => 'r1'), array('foo'), null, null), + 38 => array(array('_route' => 'r10'), array('foo'), null, null), + 46 => array(array('_route' => 'r100'), array('foo'), null, null), + 59 => array(array('_route' => 'r2'), array('foo'), null, null), + 70 => array(array('_route' => 'r20'), array('foo'), null, null), + 78 => array(array('_route' => 'r200'), array('foo'), null, null), ); list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m]; @@ -76,7 +84,7 @@ public function match($rawPathinfo) return $ret; } - if (115 === $m) { + if (78 === $m) { break; } $regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m)); diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher13.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher13.php index a7ff452cc6ef1..b4457d7cdc7e7 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher13.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher13.php @@ -27,12 +27,12 @@ public function match($rawPathinfo) $canonicalMethod = 'GET'; } - $matchedPathinfo = $host.$pathinfo; + $matchedPathinfo = $host.'.'.$pathinfo; $regexList = array( 0 => '{^(?' - .'|(?i:([^\\.]++)\\.exampple\\.com)(?' + .'|(?i:([^\\.]++)\\.exampple\\.com)\\.(?' .'|/abc([^/]++)(?' - .'|(*:54)' + .'|(*:56)' .')' .')' .')$}sD', @@ -41,7 +41,7 @@ public function match($rawPathinfo) foreach ($regexList as $offset => $regex) { while (preg_match($regex, $matchedPathinfo, $matches)) { switch ($m = (int) $matches['MARK']) { - case 54: + case 56: $matches = array('foo' => $matches[1] ?? null, 'foo' => $matches[2] ?? null); // r1 @@ -53,7 +53,7 @@ public function match($rawPathinfo) break; } - if (54 === $m) { + if (56 === $m) { break; } $regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m)); diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php index c33e1846a8cfb..79b650eb5b26d 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher2.php @@ -116,50 +116,50 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a return $ret; } - $matchedPathinfo = $host.$pathinfo; + $matchedPathinfo = $host.'.'.$pathinfo; $regexList = array( 0 => '{^(?' - .'|[^/]*+(?' - .'|/foo/(baz|symfony)(*:34)' + .'|(?:(?:[^.]*+\\.)++)(?' + .'|/foo/(baz|symfony)(*:46)' .'|/bar(?' - .'|/([^/]++)(*:57)' - .'|head/([^/]++)(*:77)' + .'|/([^/]++)(*:69)' + .'|head/([^/]++)(*:89)' .')' .'|/test/([^/]++)/(?' - .'|(*:103)' + .'|(*:115)' .')' - .'|/([\']+)(*:119)' + .'|/([\']+)(*:131)' .'|/a/(?' .'|b\'b/([^/]++)(?' - .'|(*:148)' - .'|(*:156)' + .'|(*:160)' + .'|(*:168)' .')' - .'|(.*)(*:169)' + .'|(.*)(*:181)' .'|b\'b/([^/]++)(?' - .'|(*:192)' - .'|(*:200)' + .'|(*:204)' + .'|(*:212)' .')' .')' - .'|/multi/hello(?:/([^/]++))?(*:236)' + .'|/multi/hello(?:/([^/]++))?(*:248)' .'|/([^/]++)/b/([^/]++)(?' - .'|(*:267)' - .'|(*:275)' + .'|(*:279)' + .'|(*:287)' .')' - .'|/aba/([^/]++)(*:297)' - .')|(?i:([^\\.]++)\\.example\\.com)(?' + .'|/aba/([^/]++)(*:309)' + .')|(?i:([^\\.]++)\\.example\\.com)\\.(?' .'|/route1(?' - .'|3/([^/]++)(*:357)' - .'|4/([^/]++)(*:375)' + .'|3/([^/]++)(*:371)' + .'|4/([^/]++)(*:389)' .')' - .')|(?i:c\\.example\\.com)(?' - .'|/route15/([^/]++)(*:425)' - .')|[^/]*+(?' - .'|/route16/([^/]++)(*:460)' + .')|(?i:c\\.example\\.com)\\.(?' + .'|/route15/([^/]++)(*:441)' + .')|(?:(?:[^.]*+\\.)++)(?' + .'|/route16/([^/]++)(*:488)' .'|/a/(?' - .'|a\\.\\.\\.(*:481)' + .'|a\\.\\.\\.(*:509)' .'|b/(?' - .'|([^/]++)(*:502)' - .'|c/([^/]++)(*:520)' + .'|([^/]++)(*:530)' + .'|c/([^/]++)(*:548)' .')' .')' .')' @@ -169,7 +169,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a foreach ($regexList as $offset => $regex) { while (preg_match($regex, $matchedPathinfo, $matches)) { switch ($m = (int) $matches['MARK']) { - case 103: + case 115: $matches = array('foo' => $matches[1] ?? null); // baz4 @@ -196,7 +196,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a not_bazbaz6: break; - case 148: + case 160: $matches = array('foo' => $matches[1] ?? null); // foo1 @@ -210,14 +210,14 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a not_foo1: break; - case 192: + case 204: $matches = array('foo1' => $matches[1] ?? null); // foo2 return $this->mergeDefaults(array('_route' => 'foo2') + $matches, array()); break; - case 267: + case 279: $matches = array('_locale' => $matches[1] ?? null, 'foo' => $matches[2] ?? null); // foo3 @@ -226,23 +226,23 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a break; default: $routes = array( - 34 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null), - 57 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null), - 77 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null), - 119 => array(array('_route' => 'quoter'), array('quoter'), null, null), - 156 => array(array('_route' => 'bar1'), array('bar'), null, null), - 169 => array(array('_route' => 'overridden'), array('var'), null, null), - 200 => array(array('_route' => 'bar2'), array('bar1'), null, null), - 236 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null), - 275 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null), - 297 => array(array('_route' => 'foo4'), array('foo'), null, null), - 357 => array(array('_route' => 'route13'), array('var1', 'name'), null, null), - 375 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null), - 425 => array(array('_route' => 'route15'), array('name'), null, null), - 460 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null), - 481 => array(array('_route' => 'a'), array(), null, null), - 502 => array(array('_route' => 'b'), array('var'), null, null), - 520 => array(array('_route' => 'c'), array('var'), null, null), + 46 => array(array('_route' => 'foo', 'def' => 'test'), array('bar'), null, null), + 69 => array(array('_route' => 'bar'), array('foo'), array('GET' => 0, 'HEAD' => 1), null), + 89 => array(array('_route' => 'barhead'), array('foo'), array('GET' => 0), null), + 131 => array(array('_route' => 'quoter'), array('quoter'), null, null), + 168 => array(array('_route' => 'bar1'), array('bar'), null, null), + 181 => array(array('_route' => 'overridden'), array('var'), null, null), + 212 => array(array('_route' => 'bar2'), array('bar1'), null, null), + 248 => array(array('_route' => 'helloWorld', 'who' => 'World!'), array('who'), null, null), + 287 => array(array('_route' => 'bar3'), array('_locale', 'bar'), null, null), + 309 => array(array('_route' => 'foo4'), array('foo'), null, null), + 371 => array(array('_route' => 'route13'), array('var1', 'name'), null, null), + 389 => array(array('_route' => 'route14', 'var1' => 'val'), array('var1', 'name'), null, null), + 441 => array(array('_route' => 'route15'), array('name'), null, null), + 488 => array(array('_route' => 'route16', 'var1' => 'val'), array('name'), null, null), + 509 => array(array('_route' => 'a'), array(), null, null), + 530 => array(array('_route' => 'b'), array('var'), null, null), + 548 => array(array('_route' => 'c'), array('var'), null, null), ); list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m]; @@ -268,7 +268,7 @@ private function doMatch(string $rawPathinfo, array &$allow = array(), array &$a return $ret; } - if (520 === $m) { + if (548 === $m) { break; } $regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m)); diff --git a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher8.php b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher8.php index f3163063c4329..0f2ce53fed0b9 100644 --- a/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher8.php +++ b/src/Symfony/Component/Routing/Tests/Fixtures/dumper/url_matcher8.php @@ -32,10 +32,10 @@ public function match($rawPathinfo) .'|/(a)(*:11)' .')$}sD', 11 => '{^(?' - .'|/(.)(*:26)' + .'|/(.)(*:22)' .')$}sDu', - 26 => '{^(?' - .'|/(.)(*:41)' + 22 => '{^(?' + .'|/(.)(*:33)' .')$}sD', ); @@ -45,8 +45,8 @@ public function match($rawPathinfo) default: $routes = array( 11 => array(array('_route' => 'a'), array('a'), null, null), - 26 => array(array('_route' => 'b'), array('a'), null, null), - 41 => array(array('_route' => 'c'), array('a'), null, null), + 22 => array(array('_route' => 'b'), array('a'), null, null), + 33 => array(array('_route' => 'c'), array('a'), null, null), ); list($ret, $vars, $requiredMethods, $requiredSchemes) = $routes[$m]; @@ -72,7 +72,7 @@ public function match($rawPathinfo) return $ret; } - if (41 === $m) { + if (33 === $m) { break; } $regex = substr_replace($regex, 'F', $m - $offset, 1 + strlen($m)); diff --git a/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php b/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php index 1e13f0883e9db..f0013d7bc3d10 100644 --- a/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php +++ b/src/Symfony/Component/Routing/Tests/Matcher/UrlMatcherTest.php @@ -633,6 +633,43 @@ public function testDotAllWithCatchAll() $this->assertEquals(array('_route' => 'a', 'id' => 'foo/bar'), $matcher->match('/foo/bar.html')); } + public function testHostPattern() + { + $coll = new RouteCollection(); + $coll->add('a', new Route('/{app}/{action}/{unused}', array(), array(), array(), '{host}')); + + $expected = array( + '_route' => 'a', + 'app' => 'an_app', + 'action' => 'an_action', + 'unused' => 'unused', + 'host' => 'foo', + ); + $matcher = $this->getUrlMatcher($coll, new RequestContext('', 'GET', 'foo')); + $this->assertEquals($expected, $matcher->match('/an_app/an_action/unused')); + } + + public function testUtf8Prefix() + { + $coll = new RouteCollection(); + $coll->add('a', new Route('/é{foo}', array(), array(), array('utf8' => true))); + $coll->add('b', new Route('/è{bar}', array(), array(), array('utf8' => true))); + + $matcher = $this->getUrlMatcher($coll); + $this->assertEquals('a', $matcher->match('/éo')['_route']); + } + + public function testUtf8AndMethodMatching() + { + $coll = new RouteCollection(); + $coll->add('a', new Route('/admin/api/list/{shortClassName}/{id}.{_format}', array(), array(), array('utf8' => true), '', array(), array('PUT'))); + $coll->add('b', new Route('/admin/api/package.{_format}', array(), array(), array(), '', array(), array('POST'))); + $coll->add('c', new Route('/admin/api/package.{_format}', array('_format' => 'json'), array(), array(), '', array(), array('GET'))); + + $matcher = $this->getUrlMatcher($coll); + $this->assertEquals('c', $matcher->match('/admin/api/package.json')['_route']); + } + protected function getUrlMatcher(RouteCollection $routes, RequestContext $context = null) { return new UrlMatcher($routes, $context ?: new RequestContext()); diff --git a/src/Symfony/Component/Routing/Tests/RouteCompilerTest.php b/src/Symfony/Component/Routing/Tests/RouteCompilerTest.php index 1ce132b4d21a8..04bcdac918ac2 100644 --- a/src/Symfony/Component/Routing/Tests/RouteCompilerTest.php +++ b/src/Symfony/Component/Routing/Tests/RouteCompilerTest.php @@ -398,6 +398,7 @@ public function provideRemoveCapturingGroup() yield array('#^/(?P(?:b))$#sD', '(?:b)'); yield array('#^/(?P(?(b)b))$#sD', '(?(b)b)'); yield array('#^/(?P(*F))$#sD', '(*F)'); + yield array('#^/(?P(?:(?:foo)))$#sD', '((foo))'); } } From 9786ec8e193942287b94b0888e669a2ffa4c58f1 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 8 Jun 2018 11:29:49 +0200 Subject: [PATCH 039/108] [Cache][Security] Use Throwable where possible --- .../Component/Cache/Adapter/PhpArrayAdapter.php | 10 ++-------- .../Component/Cache/Simple/PhpArrayCache.php | 17 ++++++----------- .../Component/Cache/Traits/ApcuTrait.php | 14 ++++++-------- .../Config/ResourceCheckerConfigCache.php | 14 +++++++------- .../Security/Http/Firewall/ContextListener.php | 3 +-- 5 files changed, 22 insertions(+), 36 deletions(-) diff --git a/src/Symfony/Component/Cache/Adapter/PhpArrayAdapter.php b/src/Symfony/Component/Cache/Adapter/PhpArrayAdapter.php index ca5ef743d2285..02b12b237114d 100644 --- a/src/Symfony/Component/Cache/Adapter/PhpArrayAdapter.php +++ b/src/Symfony/Component/Cache/Adapter/PhpArrayAdapter.php @@ -99,12 +99,8 @@ public function getItem($key) $value = null; } elseif (\is_string($value) && isset($value[2]) && ':' === $value[1]) { try { - $e = null; $value = unserialize($value); - } catch (\Error $e) { - } catch (\Exception $e) { - } - if (null !== $e) { + } catch (\Throwable $e) { $value = null; $isHit = false; } @@ -238,9 +234,7 @@ private function generateItems(array $keys): \Generator } elseif (\is_string($value) && isset($value[2]) && ':' === $value[1]) { try { yield $key => $f($key, unserialize($value), true); - } catch (\Error $e) { - yield $key => $f($key, null, false); - } catch (\Exception $e) { + } catch (\Throwable $e) { yield $key => $f($key, null, false); } } else { diff --git a/src/Symfony/Component/Cache/Simple/PhpArrayCache.php b/src/Symfony/Component/Cache/Simple/PhpArrayCache.php index 3feb9f0b1a004..64dc776f74a31 100644 --- a/src/Symfony/Component/Cache/Simple/PhpArrayCache.php +++ b/src/Symfony/Component/Cache/Simple/PhpArrayCache.php @@ -74,15 +74,12 @@ public function get($key, $default = null) $value = $this->values[$key]; if ('N;' === $value) { - $value = null; - } elseif (\is_string($value) && isset($value[2]) && ':' === $value[1]) { + return null; + } + if (\is_string($value) && isset($value[2]) && ':' === $value[1]) { try { - $e = null; - $value = unserialize($value); - } catch (\Error $e) { - } catch (\Exception $e) { - } - if (null !== $e) { + return unserialize($value); + } catch (\Throwable $e) { return $default; } } @@ -235,9 +232,7 @@ private function generateItems(array $keys, $default) } elseif (\is_string($value) && isset($value[2]) && ':' === $value[1]) { try { yield $key => unserialize($value); - } catch (\Error $e) { - yield $key => $default; - } catch (\Exception $e) { + } catch (\Throwable $e) { yield $key => $default; } } else { diff --git a/src/Symfony/Component/Cache/Traits/ApcuTrait.php b/src/Symfony/Component/Cache/Traits/ApcuTrait.php index fe7dfbab7d8c0..cec621b868f49 100644 --- a/src/Symfony/Component/Cache/Traits/ApcuTrait.php +++ b/src/Symfony/Component/Cache/Traits/ApcuTrait.php @@ -103,15 +103,13 @@ protected function doSave(array $values, $lifetime) } return array_keys($failures); - } catch (\Error $e) { - } catch (\Exception $e) { - } + } catch (\Throwable $e) { + if (1 === count($values)) { + // Workaround https://github.com/krakjoe/apcu/issues/170 + apcu_delete(key($values)); + } - if (1 === count($values)) { - // Workaround https://github.com/krakjoe/apcu/issues/170 - apcu_delete(key($values)); + throw $e; } - - throw $e; } } diff --git a/src/Symfony/Component/Config/ResourceCheckerConfigCache.php b/src/Symfony/Component/Config/ResourceCheckerConfigCache.php index ebacb7a4c0be9..6f64c4abcd66f 100644 --- a/src/Symfony/Component/Config/ResourceCheckerConfigCache.php +++ b/src/Symfony/Component/Config/ResourceCheckerConfigCache.php @@ -168,13 +168,13 @@ private function safelyUnserialize($file) try { $meta = unserialize(file_get_contents($file)); - } catch (\Error $e) { - } catch (\Exception $e) { - } - restore_error_handler(); - ini_set('unserialize_callback_func', $prevUnserializeHandler); - if (null !== $e && $e !== $signalingException) { - throw $e; + } catch (\Throwable $e) { + if ($e !== $signalingException) { + throw $e; + } + } finally { + restore_error_handler(); + ini_set('unserialize_callback_func', $prevUnserializeHandler); } return $meta; diff --git a/src/Symfony/Component/Security/Http/Firewall/ContextListener.php b/src/Symfony/Component/Security/Http/Firewall/ContextListener.php index 6486f0eaf6085..7d3b960a1402a 100644 --- a/src/Symfony/Component/Security/Http/Firewall/ContextListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/ContextListener.php @@ -224,8 +224,7 @@ private function safelyUnserialize($serializedToken) try { $token = unserialize($serializedToken); - } catch (\Error $e) { - } catch (\Exception $e) { + } catch (\Throwable $e) { } restore_error_handler(); ini_set('unserialize_callback_func', $prevUnserializeHandler); From 847abd3ec98d82b2c0496e5c7657662ecd95c9ea Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sat, 9 Jun 2018 00:30:30 +0200 Subject: [PATCH 040/108] [FrameworkBundle] decouple some cache-warmer's test from internal details --- .../CacheWarmer/SerializerCacheWarmerTest.php | 15 ++++------- .../CacheWarmer/ValidatorCacheWarmerTest.php | 26 +++++++------------ 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/SerializerCacheWarmerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/SerializerCacheWarmerTest.php index e5df7b8c8a7cc..86aee6e0cc354 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/SerializerCacheWarmerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/SerializerCacheWarmerTest.php @@ -14,6 +14,8 @@ use Symfony\Bundle\FrameworkBundle\CacheWarmer\SerializerCacheWarmer; use Symfony\Bundle\FrameworkBundle\Tests\TestCase; use Symfony\Component\Cache\Adapter\ArrayAdapter; +use Symfony\Component\Cache\Adapter\NullAdapter; +use Symfony\Component\Cache\Adapter\PhpArrayAdapter; use Symfony\Component\Serializer\Mapping\Factory\CacheClassMetadataFactory; use Symfony\Component\Serializer\Mapping\Loader\XmlFileLoader; use Symfony\Component\Serializer\Mapping\Loader\YamlFileLoader; @@ -41,12 +43,10 @@ public function testWarmUp() $this->assertFileExists($file); - $values = require $file; + $arrayPool = new PhpArrayAdapter($file, new NullAdapter()); - $this->assertInternalType('array', $values); - $this->assertCount(2, $values); - $this->assertArrayHasKey('Symfony_Bundle_FrameworkBundle_Tests_Fixtures_Serialization_Person', $values); - $this->assertArrayHasKey('Symfony_Bundle_FrameworkBundle_Tests_Fixtures_Serialization_Author', $values); + $this->assertTrue($arrayPool->getItem('Symfony_Bundle_FrameworkBundle_Tests_Fixtures_Serialization_Person')->isHit()); + $this->assertTrue($arrayPool->getItem('Symfony_Bundle_FrameworkBundle_Tests_Fixtures_Serialization_Author')->isHit()); $values = $fallbackPool->getValues(); @@ -72,11 +72,6 @@ public function testWarmUpWithoutLoader() $this->assertFileExists($file); - $values = require $file; - - $this->assertInternalType('array', $values); - $this->assertCount(0, $values); - $values = $fallbackPool->getValues(); $this->assertInternalType('array', $values); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ValidatorCacheWarmerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ValidatorCacheWarmerTest.php index 23b4732afcb3a..f8d3710c6d1c5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ValidatorCacheWarmerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/CacheWarmer/ValidatorCacheWarmerTest.php @@ -14,6 +14,9 @@ use Symfony\Bundle\FrameworkBundle\CacheWarmer\ValidatorCacheWarmer; use Symfony\Bundle\FrameworkBundle\Tests\TestCase; use Symfony\Component\Cache\Adapter\ArrayAdapter; +use Symfony\Component\Cache\Adapter\NullAdapter; +use Symfony\Component\Cache\Adapter\PhpArrayAdapter; +use Symfony\Component\Validator\Mapping\ClassMetadata; use Symfony\Component\Validator\ValidatorBuilder; class ValidatorCacheWarmerTest extends TestCase @@ -36,12 +39,10 @@ public function testWarmUp() $this->assertFileExists($file); - $values = require $file; + $arrayPool = new PhpArrayAdapter($file, new NullAdapter()); - $this->assertInternalType('array', $values); - $this->assertCount(2, $values); - $this->assertArrayHasKey('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Person', $values); - $this->assertArrayHasKey('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Author', $values); + $this->assertTrue($arrayPool->getItem('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Person')->isHit()); + $this->assertTrue($arrayPool->getItem('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Author')->isHit()); $values = $fallbackPool->getValues(); @@ -67,14 +68,12 @@ public function testWarmUpWithAnnotations() $this->assertFileExists($file); - $values = require $file; + $arrayPool = new PhpArrayAdapter($file, new NullAdapter()); - $this->assertInternalType('array', $values); - $this->assertCount(1, $values); - $this->assertArrayHasKey('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Category', $values); + $item = $arrayPool->getItem('Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Category'); + $this->assertTrue($item->isHit()); - // Simple check to make sure that at least one constraint is actually cached, in this case the "id" property Type. - $this->assertContains('"int"', $values['Symfony.Bundle.FrameworkBundle.Tests.Fixtures.Validation.Category']); + $this->assertInstanceOf(ClassMetadata::class, $item->get()); $values = $fallbackPool->getValues(); @@ -98,11 +97,6 @@ public function testWarmUpWithoutLoader() $this->assertFileExists($file); - $values = require $file; - - $this->assertInternalType('array', $values); - $this->assertCount(0, $values); - $values = $fallbackPool->getValues(); $this->assertInternalType('array', $values); From 16806741744d8f14ca6a7397772c754abd74a483 Mon Sep 17 00:00:00 2001 From: David Maicher Date: Sat, 9 Jun 2018 14:38:46 +0200 Subject: [PATCH 041/108] [FrameworkBundle] fix for allowing single colon controller notation --- .../Routing/DelegatingLoader.php | 4 +- .../Tests/Routing/DelegatingLoaderTest.php | 48 +++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php b/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php index 6df729b02afe1..049887ba35e8b 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php +++ b/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php @@ -94,8 +94,8 @@ public function load($resource, $type = null) } if (1 === substr_count($controller, ':')) { - $controller = str_replace(':', '::', $controller); - @trigger_error(sprintf('Referencing controllers with a single colon is deprecated since Symfony 4.1. Use %s instead.', $controller), E_USER_DEPRECATED); + $nonDeprecatedNotation = str_replace(':', '::', $controller); + @trigger_error(sprintf('Referencing controllers with a single colon is deprecated since Symfony 4.1. Use %s instead.', $nonDeprecatedNotation), E_USER_DEPRECATED); } $route->setDefault('_controller', $controller); diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php index 407158333d89e..5f08cce0ab860 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php @@ -5,7 +5,11 @@ use PHPUnit\Framework\TestCase; use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser; use Symfony\Bundle\FrameworkBundle\Routing\DelegatingLoader; +use Symfony\Component\Config\Loader\LoaderInterface; use Symfony\Component\Config\Loader\LoaderResolver; +use Symfony\Component\Config\Loader\LoaderResolverInterface; +use Symfony\Component\Routing\Route; +use Symfony\Component\Routing\RouteCollection; class DelegatingLoaderTest extends TestCase { @@ -17,4 +21,48 @@ public function testConstructorApi() new DelegatingLoader($controllerNameParser, new LoaderResolver()); $this->assertTrue(true, '__construct() takes a ControllerNameParser and LoaderResolverInterface respectively as its first and second argument.'); } + + /** + * @group legacy + * @expectedDeprecation Referencing controllers with foo:bar:baz is deprecated since Symfony 4.1. Use some_parsed::controller instead. + * @expectedDeprecation Referencing controllers with a single colon is deprecated since Symfony 4.1. Use foo::baz instead. + */ + public function testLoad() + { + $controllerNameParser = $this->getMockBuilder(ControllerNameParser::class) + ->disableOriginalConstructor() + ->getMock(); + + $controllerNameParser->expects($this->once()) + ->method('parse') + ->with('foo:bar:baz') + ->willReturn('some_parsed::controller'); + + $loaderResolver = $this->getMockBuilder(LoaderResolverInterface::class) + ->disableOriginalConstructor() + ->getMock(); + + $loader = $this->getMockBuilder(LoaderInterface::class)->getMock(); + + $loaderResolver->expects($this->once()) + ->method('resolve') + ->willReturn($loader); + + $routeCollection = new RouteCollection(); + $routeCollection->add('foo', new Route('/', array('_controller' => 'foo:bar:baz'))); + $routeCollection->add('bar', new Route('/', array('_controller' => 'foo::baz'))); + $routeCollection->add('baz', new Route('/', array('_controller' => 'foo:baz'))); + + $loader->expects($this->once()) + ->method('load') + ->willReturn($routeCollection); + + $delegatingLoader = new DelegatingLoader($controllerNameParser, $loaderResolver); + + $loadedRouteCollection = $delegatingLoader->load('foo'); + $this->assertCount(3, $loadedRouteCollection); + $this->assertSame('some_parsed::controller', $routeCollection->get('foo')->getDefault('_controller')); + $this->assertSame('foo::baz', $routeCollection->get('bar')->getDefault('_controller')); + $this->assertSame('foo:baz', $routeCollection->get('baz')->getDefault('_controller')); + } } From 322f58b334105e09330809e91e9b09e27b7c1e99 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sat, 9 Jun 2018 21:00:10 +0200 Subject: [PATCH 042/108] [DI] Deduplicate generated proxy classes --- .../DependencyInjection/Dumper/PhpDumper.php | 7 +- .../Tests/Dumper/PhpDumperTest.php | 13 +++ .../Tests/Fixtures/includes/classes.php | 4 +- .../php/services_dedup_lazy_proxy.php | 88 +++++++++++++++++++ .../Fixtures/php/services_non_shared_lazy.php | 4 +- 5 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_dedup_lazy_proxy.php diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index d640b9a2351d1..560b2516bb3c4 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -396,6 +396,7 @@ private function collectLineage($class, array &$lineage) private function generateProxyClasses() { + $alreadyGenerated = array(); $definitions = $this->container->getDefinitions(); $strip = '' === $this->docStar && method_exists('Symfony\Component\HttpKernel\Kernel', 'stripComments'); $proxyDumper = $this->getProxyDumper(); @@ -404,8 +405,12 @@ private function generateProxyClasses() if (!$proxyDumper->isProxyCandidate($definition)) { continue; } + if (isset($alreadyGenerated[$class = $definition->getClass()])) { + continue; + } + $alreadyGenerated[$class] = true; // register class' reflector for resource tracking - $this->container->getReflectionClass($definition->getClass()); + $this->container->getReflectionClass($class); $proxyCode = "\n".$proxyDumper->getProxyCode($definition); if ($strip) { $proxyCode = "addToAssertionCount(1); } + public function testDedupLazyProxy() + { + $container = new ContainerBuilder(); + $container->register('foo', 'stdClass')->setLazy(true)->setPublic(true); + $container->register('bar', 'stdClass')->setLazy(true)->setPublic(true); + $container->compile(); + + $dumper = new PhpDumper($container); + $dumper->setProxyDumper(new \DummyProxyDumper()); + + $this->assertStringEqualsFile(self::$fixturesPath.'/php/services_dedup_lazy_proxy.php', $dumper->dump()); + } + public function testLazyArgumentProvideGenerator() { require_once self::$fixturesPath.'/includes/classes.php'; diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php index bced911043c55..33b043fa3f384 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php @@ -90,12 +90,12 @@ public function isProxyCandidate(Definition $definition) public function getProxyFactoryCode(Definition $definition, $id, $factoryCall = null) { - return " // lazy factory\n\n"; + return " // lazy factory for {$definition->getClass()}\n\n"; } public function getProxyCode(Definition $definition) { - return "// proxy code\n"; + return "// proxy code for {$definition->getClass()}\n"; } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_dedup_lazy_proxy.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_dedup_lazy_proxy.php new file mode 100644 index 0000000000000..73a7f259f86b5 --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_dedup_lazy_proxy.php @@ -0,0 +1,88 @@ +services = array(); + $this->methodMap = array( + 'bar' => 'getBarService', + 'foo' => 'getFooService', + ); + + $this->aliases = array(); + } + + public function getRemovedIds() + { + return array( + 'Psr\\Container\\ContainerInterface' => true, + 'Symfony\\Component\\DependencyInjection\\ContainerInterface' => true, + ); + } + + public function compile() + { + throw new LogicException('You cannot compile a dumped container that was already compiled.'); + } + + public function isCompiled() + { + return true; + } + + public function isFrozen() + { + @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the isCompiled() method instead.', __METHOD__), E_USER_DEPRECATED); + + return true; + } + + protected function createProxy($class, \Closure $factory) + { + return $factory(); + } + + /** + * Gets the public 'bar' shared service. + * + * @return \stdClass + */ + protected function getBarService($lazyLoad = true) + { + // lazy factory for stdClass + + return new \stdClass(); + } + + /** + * Gets the public 'foo' shared service. + * + * @return \stdClass + */ + protected function getFooService($lazyLoad = true) + { + // lazy factory for stdClass + + return new \stdClass(); + } +} + +// proxy code for stdClass diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy.php index 9e2f1ab915f8e..6c3b1405069f1 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy.php @@ -83,10 +83,10 @@ protected function getBarService() */ protected function getFooService($lazyLoad = true) { - // lazy factory + // lazy factory for stdClass return new \stdClass(); } } -// proxy code +// proxy code for stdClass From 50979b5ea47336e5a052bba88df3746e4e7fb775 Mon Sep 17 00:00:00 2001 From: nsbx Date: Sat, 9 Jun 2018 15:16:17 +0200 Subject: [PATCH 043/108] [PhpUnitBridge] Fix error on some Windows OS --- src/Symfony/Bridge/PhpUnit/bin/simple-phpunit | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit b/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit index 552d5abb36b5e..197650915fe91 100755 --- a/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit +++ b/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit @@ -70,6 +70,8 @@ if (!file_exists("$PHPUNIT_DIR/phpunit-$PHPUNIT_VERSION/phpunit") || md5_file(__ throw new \RuntimeException("Could not find $remoteZip"); } stream_copy_to_stream($remoteZipStream, fopen("$PHPUNIT_VERSION.zip", 'wb')); + } elseif ('\\' === DIRECTORY_SEPARATOR) { + passthru("certutil -urlcache -split -f \"https://github.com/sebastianbergmann/phpunit/archive/$PHPUNIT_VERSION.zip\" $PHPUNIT_VERSION.zip"); } else { @unlink("$PHPUNIT_VERSION.zip"); passthru("wget -q https://github.com/sebastianbergmann/phpunit/archive/$PHPUNIT_VERSION.zip"); From 85b832bcc9d862d6e372acd19f5d5ef23e46d7fb Mon Sep 17 00:00:00 2001 From: Roland Franssen Date: Sat, 9 Jun 2018 09:49:02 +0200 Subject: [PATCH 044/108] [HttpKernel] Log/Collect exceptions at prio 0 --- src/Symfony/Component/HttpKernel/CHANGELOG.md | 2 +- .../Component/HttpKernel/EventListener/ExceptionListener.php | 3 +-- .../Component/HttpKernel/EventListener/ProfilerListener.php | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/CHANGELOG.md b/src/Symfony/Component/HttpKernel/CHANGELOG.md index f64905cbe086e..c98d2235e333d 100644 --- a/src/Symfony/Component/HttpKernel/CHANGELOG.md +++ b/src/Symfony/Component/HttpKernel/CHANGELOG.md @@ -5,7 +5,7 @@ CHANGELOG ----- * added orphaned events support to `EventDataCollector` - * `ExceptionListener` now logs and collects exceptions at priority `2048` (previously logged at `-128` and collected at `0`) + * `ExceptionListener` now logs exceptions at priority `0` (previously logged at `-128`) * Deprecated `service:action` syntax with a single colon to reference controllers. Use `service::method` instead. * Added the ability to profile individual argument value resolvers via the `Symfony\Component\HttpKernel\Controller\ArgumentResolver\TraceableValueResolver` diff --git a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php index fc749de599a48..4812f426951c8 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php @@ -44,7 +44,6 @@ public function __construct($controller, LoggerInterface $logger = null, $debug public function logKernelException(GetResponseForExceptionEvent $event) { $exception = $event->getException(); - $request = $event->getRequest(); $this->logException($exception, sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', get_class($exception), $exception->getMessage(), $exception->getFile(), $exception->getLine())); } @@ -90,7 +89,7 @@ public static function getSubscribedEvents() { return array( KernelEvents::EXCEPTION => array( - array('logKernelException', 2048), + array('logKernelException', 0), array('onKernelException', -128), ), ); diff --git a/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php b/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php index 9cc554db72ab0..045e08347ff81 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/ProfilerListener.php @@ -121,7 +121,7 @@ public static function getSubscribedEvents() { return array( KernelEvents::RESPONSE => array('onKernelResponse', -100), - KernelEvents::EXCEPTION => array('onKernelException', 2048), + KernelEvents::EXCEPTION => array('onKernelException', 0), KernelEvents::TERMINATE => array('onKernelTerminate', -1024), ); } From 1f346f446d462e5d0b79bf0642ed4b89621a1684 Mon Sep 17 00:00:00 2001 From: Webnet team Date: Mon, 21 May 2018 12:07:14 +0200 Subject: [PATCH 045/108] [Serializer] deserialize from xml: Fix a collection that contains the only one element --- .../Normalizer/AbstractObjectNormalizer.php | 6 + .../AbstractObjectNormalizerTest.php | 196 ++++++++++++++++++ 2 files changed, 202 insertions(+) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index 251ec5fac05e4..020b3d5317a74 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -255,6 +255,12 @@ private function validateAndDenormalize($currentClass, $attribute, $data, $forma $builtinType = Type::BUILTIN_TYPE_OBJECT; $class = $collectionValueType->getClassName().'[]'; + // Fix a collection that contains the only one element + // This is special to xml format only + if ('xml' === $format && !is_int(key($data))) { + $data = array($data); + } + if (null !== $collectionKeyType = $type->getCollectionKeyType()) { $context['key_type'] = $collectionKeyType; } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index 3ca418d55ed6b..b1d40dcee3e1d 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -13,9 +13,13 @@ use Doctrine\Common\Annotations\AnnotationReader; use PHPUnit\Framework\TestCase; +use Symfony\Component\Serializer\Exception\NotNormalizableValueException; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory; use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader; use Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer; +use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; +use Symfony\Component\Serializer\SerializerAwareInterface; +use Symfony\Component\Serializer\SerializerInterface; class AbstractObjectNormalizerTest extends TestCase { @@ -69,6 +73,75 @@ public function testDenormalizeWithExtraAttributesAndNoGroupsWithMetadataFactory array('allow_extra_attributes' => false) ); } + + public function testDenormalizeCollectionDecodedFromXmlWithOneChild() + { + $denormalizer = $this->getDenormalizerForDummyCollection(); + + $dummyCollection = $denormalizer->denormalize( + array( + 'children' => array( + 'bar' => 'first', + ), + ), + DummyCollection::class, + 'xml' + ); + + $this->assertInstanceOf(DummyCollection::class, $dummyCollection); + $this->assertInternalType('array', $dummyCollection->children); + $this->assertCount(1, $dummyCollection->children); + $this->assertInstanceOf(DummyChild::class, $dummyCollection->children[0]); + } + + public function testDenormalizeCollectionDecodedFromXmlWithTwoChildren() + { + $denormalizer = $this->getDenormalizerForDummyCollection(); + + $dummyCollection = $denormalizer->denormalize( + array( + 'children' => array( + array('bar' => 'first'), + array('bar' => 'second'), + ), + ), + DummyCollection::class, + 'xml' + ); + + $this->assertInstanceOf(DummyCollection::class, $dummyCollection); + $this->assertInternalType('array', $dummyCollection->children); + $this->assertCount(2, $dummyCollection->children); + $this->assertInstanceOf(DummyChild::class, $dummyCollection->children[0]); + $this->assertInstanceOf(DummyChild::class, $dummyCollection->children[1]); + } + + private function getDenormalizerForDummyCollection() + { + $extractor = $this->getMockBuilder('Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor')->getMock(); + $extractor->method('getTypes') + ->will($this->onConsecutiveCalls( + array( + new \Symfony\Component\PropertyInfo\Type( + 'array', + false, + null, + true, + new \Symfony\Component\PropertyInfo\Type('int'), + new \Symfony\Component\PropertyInfo\Type('object', false, DummyChild::class) + ), + ), + null + )); + + $denormalizer = new AbstractObjectNormalizerCollectionDummy(null, null, $extractor); + $arrayDenormalizer = new ArrayDenormalizerDummy(); + $serializer = new SerializerCollectionDummy(array($arrayDenormalizer, $denormalizer)); + $arrayDenormalizer->setSerializer($serializer); + $denormalizer->setSerializer($serializer); + + return $denormalizer; + } } class AbstractObjectNormalizerDummy extends AbstractObjectNormalizer @@ -124,3 +197,126 @@ protected function setAttributeValue($object, $attribute, $value, $format = null $object->$attribute = $value; } } + +class DummyCollection +{ + /** @var DummyChild[] */ + public $children; +} + +class DummyChild +{ + public $bar; +} + +class SerializerCollectionDummy implements \Symfony\Component\Serializer\SerializerInterface, \Symfony\Component\Serializer\Normalizer\DenormalizerInterface +{ + /** @var \Symfony\Component\Serializer\Normalizer\DenormalizerInterface */ + private $normalizers; + + /** + * @param $normalizers + */ + public function __construct($normalizers) + { + $this->normalizers = $normalizers; + } + + public function serialize($data, $format, array $context = array()) + { + } + + public function deserialize($data, $type, $format, array $context = array()) + { + } + + public function denormalize($data, $type, $format = null, array $context = array()) + { + foreach ($this->normalizers as $normalizer) { + if ($normalizer instanceof \Symfony\Component\Serializer\Normalizer\DenormalizerInterface && $normalizer->supportsDenormalization($data, $type, $format, $context)) { + return $normalizer->denormalize($data, $type, $format, $context); + } + } + } + + public function supportsDenormalization($data, $type, $format = null) + { + return true; + } +} + +class AbstractObjectNormalizerCollectionDummy extends \Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer +{ + protected function extractAttributes($object, $format = null, array $context = array()) + { + } + + protected function getAttributeValue($object, $attribute, $format = null, array $context = array()) + { + } + + protected function setAttributeValue($object, $attribute, $value, $format = null, array $context = array()) + { + $object->$attribute = $value; + } + + protected function isAllowedAttribute($classOrObject, $attribute, $format = null, array $context = array()) + { + return true; + } + + public function instantiateObject(array &$data, $class, array &$context, \ReflectionClass $reflectionClass, $allowedAttributes, $format = null) + { + return parent::instantiateObject($data, $class, $context, $reflectionClass, $allowedAttributes, $format); + } + + public function serialize($data, $format, array $context = array()) + { + } + + public function deserialize($data, $type, $format, array $context = array()) + { + } +} + +class ArrayDenormalizerDummy implements DenormalizerInterface, SerializerAwareInterface +{ + /** + * @var SerializerInterface|DenormalizerInterface + */ + private $serializer; + + /** + * {@inheritdoc} + * + * @throws NotNormalizableValueException + */ + public function denormalize($data, $class, $format = null, array $context = array()) + { + $serializer = $this->serializer; + $class = substr($class, 0, -2); + + foreach ($data as $key => $value) { + $data[$key] = $serializer->denormalize($value, $class, $format, $context); + } + + return $data; + } + + /** + * {@inheritdoc} + */ + public function supportsDenormalization($data, $type, $format = null, array $context = array()) + { + return '[]' === substr($type, -2) + && $this->serializer->supportsDenormalization($data, substr($type, 0, -2), $format, $context); + } + + /** + * {@inheritdoc} + */ + public function setSerializer(SerializerInterface $serializer) + { + $this->serializer = $serializer; + } +} From cca73bb564adae22d0e9dd0c6dafbf1466a555c1 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Wed, 30 May 2018 10:06:54 -0400 Subject: [PATCH 046/108] Avoid migration on stateless firewalls --- .../Factory/GuardAuthenticationFactory.php | 1 + .../Security/Factory/HttpBasicFactory.php | 1 + .../Security/Factory/HttpDigestFactory.php | 1 + .../Security/Factory/RemoteUserFactory.php | 1 + .../SimplePreAuthenticationFactory.php | 1 + .../Security/Factory/X509Factory.php | 1 + .../DependencyInjection/SecurityExtension.php | 4 ++ .../Resources/config/security.xml | 4 ++ .../Bundle/SecurityBundle/composer.json | 2 +- .../Guard/GuardAuthenticatorHandler.php | 24 ++++++++---- .../Tests/GuardAuthenticatorHandlerTest.php | 37 +++++++++++++++++++ .../AbstractPreAuthenticatedListener.php | 24 ++++++++---- .../Firewall/BasicAuthenticationListener.php | 24 ++++++++---- .../Firewall/DigestAuthenticationListener.php | 27 ++++++++++---- .../SimplePreAuthenticationListener.php | 24 ++++++++---- 15 files changed, 138 insertions(+), 38 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php index 533560d6d986d..bd49cbc932083 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php @@ -77,6 +77,7 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $listener = $container->setDefinition($listenerId, new DefinitionDecorator('security.authentication.listener.guard')); $listener->replaceArgument(2, $id); $listener->replaceArgument(3, $authenticatorReferences); + $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); // determine the entryPointId to use $entryPointId = $this->determineEntryPoint($defaultEntryPoint, $config); diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php index 162ea05157984..f09636ec71c0d 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpBasicFactory.php @@ -41,6 +41,7 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $listener = $container->setDefinition($listenerId, new DefinitionDecorator('security.authentication.listener.basic')); $listener->replaceArgument(2, $id); $listener->replaceArgument(3, new Reference($entryPointId)); + $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); return array($provider, $listenerId, $entryPointId); } diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php index 4cfb79653c054..944a9100f389d 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/HttpDigestFactory.php @@ -42,6 +42,7 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $listener->replaceArgument(1, new Reference($userProvider)); $listener->replaceArgument(2, $id); $listener->replaceArgument(3, new Reference($entryPointId)); + $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); return array($provider, $listenerId, $entryPointId); } diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RemoteUserFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RemoteUserFactory.php index cf2e2ed71b16c..5be068e6c4870 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RemoteUserFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/RemoteUserFactory.php @@ -38,6 +38,7 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $listener = $container->setDefinition($listenerId, new DefinitionDecorator('security.authentication.listener.remote_user')); $listener->replaceArgument(2, $id); $listener->replaceArgument(3, $config['user']); + $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); return array($providerId, $listenerId, $defaultEntryPoint); } diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/SimplePreAuthenticationFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/SimplePreAuthenticationFactory.php index c1c6e48083856..03fca8d6a25df 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/SimplePreAuthenticationFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/SimplePreAuthenticationFactory.php @@ -57,6 +57,7 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $listener = $container->setDefinition($listenerId, new DefinitionDecorator('security.authentication.listener.simple_preauth')); $listener->replaceArgument(2, $id); $listener->replaceArgument(3, new Reference($config['authenticator'])); + $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); return array($provider, $listenerId, null); } diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php index 0467ef2ba2c75..a745de9b2d78c 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/X509Factory.php @@ -39,6 +39,7 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $listener->replaceArgument(2, $id); $listener->replaceArgument(3, $config['user']); $listener->replaceArgument(4, $config['credentials']); + $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); return array($providerId, $listenerId, $defaultEntryPoint); } diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index 34276e95e79f2..5138eff36719e 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -285,7 +285,11 @@ private function createFirewall(ContainerBuilder $container, $id, $firewall, &$a } $listeners[] = new Reference($this->createContextListener($container, $contextKey)); + $sessionStrategyId = 'security.authentication.session_strategy'; + } else { + $sessionStrategyId = 'security.authentication.session_strategy_noop'; } + $container->setAlias(new Alias('security.authentication.session_strategy.'.$id, false), $sessionStrategyId); // Logout listener $logoutListenerId = null; diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml index 029395de9dea0..74b097aa4c2b7 100644 --- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml +++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml @@ -84,6 +84,10 @@ %security.authentication.session_strategy.strategy% + + none + + diff --git a/src/Symfony/Bundle/SecurityBundle/composer.json b/src/Symfony/Bundle/SecurityBundle/composer.json index f588b04888161..c0508ea29b02b 100644 --- a/src/Symfony/Bundle/SecurityBundle/composer.json +++ b/src/Symfony/Bundle/SecurityBundle/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=5.3.9", "ext-xml": "*", - "symfony/security": "^2.8.41|^3.4.11", + "symfony/security": "^2.8.42|^3.4.12", "symfony/security-acl": "~2.7|~3.0.0", "symfony/http-kernel": "~2.7|~3.0.0", "symfony/polyfill-php70": "~1.0" diff --git a/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php b/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php index 5e6eba339bf64..0164ba9235262 100644 --- a/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php +++ b/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php @@ -20,6 +20,7 @@ use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Http\SecurityEvents; +use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface; /** * A utility class that does much of the *work* during the guard authentication process. @@ -32,8 +33,8 @@ class GuardAuthenticatorHandler { private $tokenStorage; - private $dispatcher; + private $sessionStrategy; public function __construct(TokenStorageInterface $tokenStorage, EventDispatcherInterface $eventDispatcher = null) { @@ -46,7 +47,7 @@ public function __construct(TokenStorageInterface $tokenStorage, EventDispatcher */ public function authenticateWithToken(TokenInterface $token, Request $request) { - $this->migrateSession($request); + $this->migrateSession($request, $token); $this->tokenStorage->setToken($token); if (null !== $this->dispatcher) { @@ -129,15 +130,22 @@ public function handleAuthenticationFailure(AuthenticationException $authenticat )); } - private function migrateSession(Request $request) + /** + * Call this method if your authentication token is stored to a session. + * + * @final since version 2.8 + */ + public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) + { + $this->sessionStrategy = $sessionStrategy; + } + + private function migrateSession(Request $request, TokenInterface $token) { - if (!$request->hasSession() || !$request->hasPreviousSession()) { + if (!$this->sessionStrategy || !$request->hasSession() || !$request->hasPreviousSession()) { return; } - // Destroying the old session is broken in php 5.4.0 - 5.4.10 - // See https://bugs.php.net/63379 - $destroy = \PHP_VERSION_ID < 50400 || \PHP_VERSION_ID >= 50411; - $request->getSession()->migrate($destroy); + $this->sessionStrategy->onAuthentication($request, $token); } } diff --git a/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php b/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php index 662bace30877c..49ce6548acab5 100644 --- a/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php +++ b/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php @@ -25,6 +25,7 @@ class GuardAuthenticatorHandlerTest extends TestCase private $dispatcher; private $token; private $request; + private $sessionStrategy; private $guardAuthenticator; public function testAuthenticateWithToken() @@ -117,12 +118,38 @@ public function getTokenClearingTests() return $tests; } + public function testNoFailureIfSessionStrategyNotPassed() + { + $this->configurePreviousSession(); + + $this->tokenStorage->expects($this->once()) + ->method('setToken') + ->with($this->token); + + $handler = new GuardAuthenticatorHandler($this->tokenStorage, $this->dispatcher); + $handler->authenticateWithToken($this->token, $this->request); + } + + public function testSessionStrategyIsCalled() + { + $this->configurePreviousSession(); + + $this->sessionStrategy->expects($this->once()) + ->method('onAuthentication') + ->with($this->request, $this->token); + + $handler = new GuardAuthenticatorHandler($this->tokenStorage, $this->dispatcher); + $handler->setSessionAuthenticationStrategy($this->sessionStrategy); + $handler->authenticateWithToken($this->token, $this->request); + } + protected function setUp() { $this->tokenStorage = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface')->getMock(); $this->dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock(); $this->token = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\TokenInterface')->getMock(); $this->request = new Request(array(), array(), array(), array(), array(), array()); + $this->sessionStrategy = $this->getMockBuilder('Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface')->getMock(); $this->guardAuthenticator = $this->getMockBuilder('Symfony\Component\Security\Guard\GuardAuthenticatorInterface')->getMock(); } @@ -134,4 +161,14 @@ protected function tearDown() $this->request = null; $this->guardAuthenticator = null; } + + private function configurePreviousSession() + { + $session = $this->getMockBuilder('Symfony\Component\HttpFoundation\Session\SessionInterface')->getMock(); + $session->expects($this->any()) + ->method('getName') + ->willReturn('test_session_name'); + $this->request->setSession($session); + $this->request->cookies->set('test_session_name', 'session_cookie_val'); + } } diff --git a/src/Symfony/Component/Security/Http/Firewall/AbstractPreAuthenticatedListener.php b/src/Symfony/Component/Security/Http/Firewall/AbstractPreAuthenticatedListener.php index 2054c4aa0774e..6451d882e8b94 100644 --- a/src/Symfony/Component/Security/Http/Firewall/AbstractPreAuthenticatedListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/AbstractPreAuthenticatedListener.php @@ -14,6 +14,7 @@ use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\PreAuthenticatedToken; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; +use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Http\SecurityEvents; @@ -22,6 +23,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Security\Core\Exception\BadCredentialsException; +use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface; /** * AbstractPreAuthenticatedListener is the base class for all listener that @@ -37,6 +39,7 @@ abstract class AbstractPreAuthenticatedListener implements ListenerInterface private $authenticationManager; private $providerKey; private $dispatcher; + private $sessionStrategy; public function __construct(TokenStorageInterface $tokenStorage, AuthenticationManagerInterface $authenticationManager, $providerKey, LoggerInterface $logger = null, EventDispatcherInterface $dispatcher = null) { @@ -83,7 +86,7 @@ final public function handle(GetResponseEvent $event) $this->logger->info('Pre-authentication successful.', array('token' => (string) $token)); } - $this->migrateSession($request); + $this->migrateSession($request, $token); $this->tokenStorage->setToken($token); @@ -96,6 +99,16 @@ final public function handle(GetResponseEvent $event) } } + /** + * Call this method if your authentication token is stored to a session. + * + * @final since version 2.8 + */ + public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) + { + $this->sessionStrategy = $sessionStrategy; + } + /** * Clears a PreAuthenticatedToken for this provider (if present). */ @@ -118,15 +131,12 @@ private function clearToken(AuthenticationException $exception) */ abstract protected function getPreAuthenticatedData(Request $request); - private function migrateSession(Request $request) + private function migrateSession(Request $request, TokenInterface $token) { - if (!$request->hasSession() || !$request->hasPreviousSession()) { + if (!$this->sessionStrategy || !$request->hasSession() || !$request->hasPreviousSession()) { return; } - // Destroying the old session is broken in php 5.4.0 - 5.4.10 - // See https://bugs.php.net/63379 - $destroy = \PHP_VERSION_ID < 50400 || \PHP_VERSION_ID >= 50411; - $request->getSession()->migrate($destroy); + $this->sessionStrategy->onAuthentication($request, $token); } } diff --git a/src/Symfony/Component/Security/Http/Firewall/BasicAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/BasicAuthenticationListener.php index 63bd013c64e31..4b14a842dc134 100644 --- a/src/Symfony/Component/Security/Http/Firewall/BasicAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/BasicAuthenticationListener.php @@ -14,11 +14,13 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; +use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface; use Psr\Log\LoggerInterface; use Symfony\Component\HttpKernel\Event\GetResponseEvent; use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; use Symfony\Component\Security\Core\Exception\AuthenticationException; +use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface; /** * BasicAuthenticationListener implements Basic HTTP authentication. @@ -33,6 +35,7 @@ class BasicAuthenticationListener implements ListenerInterface private $authenticationEntryPoint; private $logger; private $ignoreFailure; + private $sessionStrategy; public function __construct(TokenStorageInterface $tokenStorage, AuthenticationManagerInterface $authenticationManager, $providerKey, AuthenticationEntryPointInterface $authenticationEntryPoint, LoggerInterface $logger = null) { @@ -72,7 +75,7 @@ public function handle(GetResponseEvent $event) try { $token = $this->authenticationManager->authenticate(new UsernamePasswordToken($username, $request->headers->get('PHP_AUTH_PW'), $this->providerKey)); - $this->migrateSession($request); + $this->migrateSession($request, $token); $this->tokenStorage->setToken($token); } catch (AuthenticationException $e) { @@ -93,15 +96,22 @@ public function handle(GetResponseEvent $event) } } - private function migrateSession(Request $request) + /** + * Call this method if your authentication token is stored to a session. + * + * @final since version 2.8 + */ + public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) + { + $this->sessionStrategy = $sessionStrategy; + } + + private function migrateSession(Request $request, TokenInterface $token) { - if (!$request->hasSession() || !$request->hasPreviousSession()) { + if (!$this->sessionStrategy || !$request->hasSession() || !$request->hasPreviousSession()) { return; } - // Destroying the old session is broken in php 5.4.0 - 5.4.10 - // See https://bugs.php.net/63379 - $destroy = \PHP_VERSION_ID < 50400 || \PHP_VERSION_ID >= 50411; - $request->getSession()->migrate($destroy); + $this->sessionStrategy->onAuthentication($request, $token); } } diff --git a/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php index 5655315a8b0c6..b4853931ca4b0 100644 --- a/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Security\Http\Firewall; +use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\User\UserProviderInterface; use Symfony\Component\Security\Http\EntryPoint\DigestAuthenticationEntryPoint; use Psr\Log\LoggerInterface; @@ -23,6 +24,7 @@ use Symfony\Component\Security\Core\Exception\NonceExpiredException; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Security\Core\Exception\AuthenticationException; +use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface; /** * DigestAuthenticationListener implements Digest HTTP authentication. @@ -36,6 +38,7 @@ class DigestAuthenticationListener implements ListenerInterface private $providerKey; private $authenticationEntryPoint; private $logger; + private $sessionStrategy; public function __construct(TokenStorageInterface $tokenStorage, UserProviderInterface $provider, $providerKey, DigestAuthenticationEntryPoint $authenticationEntryPoint, LoggerInterface $logger = null) { @@ -117,9 +120,20 @@ public function handle(GetResponseEvent $event) $this->logger->info('Digest authentication successful.', array('username' => $digestAuth->getUsername(), 'received' => $digestAuth->getResponse())); } - $this->migrateSession($request); + $token = new UsernamePasswordToken($user, $user->getPassword(), $this->providerKey); + $this->migrateSession($request, $token); - $this->tokenStorage->setToken(new UsernamePasswordToken($user, $user->getPassword(), $this->providerKey)); + $this->tokenStorage->setToken($token); + } + + /** + * Call this method if your authentication token is stored to a session. + * + * @final since version 2.8 + */ + public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) + { + $this->sessionStrategy = $sessionStrategy; } private function fail(GetResponseEvent $event, Request $request, AuthenticationException $authException) @@ -136,16 +150,13 @@ private function fail(GetResponseEvent $event, Request $request, AuthenticationE $event->setResponse($this->authenticationEntryPoint->start($request, $authException)); } - private function migrateSession(Request $request) + private function migrateSession(Request $request, TokenInterface $token) { - if (!$request->hasSession() || !$request->hasPreviousSession()) { + if (!$this->sessionStrategy || !$request->hasSession() || !$request->hasPreviousSession()) { return; } - // Destroying the old session is broken in php 5.4.0 - 5.4.10 - // See https://bugs.php.net/63379 - $destroy = \PHP_VERSION_ID < 50400 || \PHP_VERSION_ID >= 50411; - $request->getSession()->migrate($destroy); + $this->sessionStrategy->onAuthentication($request, $token); } } diff --git a/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php index 23e517969f4e5..cdfb06d4fa2e6 100644 --- a/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php @@ -19,12 +19,14 @@ use Symfony\Component\Security\Core\Authentication\SimplePreAuthenticatorInterface; use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken; use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; +use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\Authentication\AuthenticationFailureHandlerInterface; use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Http\SecurityEvents; use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface; /** * SimplePreAuthenticationListener implements simple proxying to an authenticator. @@ -39,6 +41,7 @@ class SimplePreAuthenticationListener implements ListenerInterface private $simpleAuthenticator; private $logger; private $dispatcher; + private $sessionStrategy; /** * @param TokenStorageInterface $tokenStorage A TokenStorageInterface instance @@ -62,6 +65,16 @@ public function __construct(TokenStorageInterface $tokenStorage, AuthenticationM $this->dispatcher = $dispatcher; } + /** + * Call this method if your authentication token is stored to a session. + * + * @final since version 2.8 + */ + public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) + { + $this->sessionStrategy = $sessionStrategy; + } + /** * Handles basic authentication. */ @@ -87,7 +100,7 @@ public function handle(GetResponseEvent $event) $token = $this->authenticationManager->authenticate($token); - $this->migrateSession($request); + $this->migrateSession($request, $token); $this->tokenStorage->setToken($token); @@ -124,15 +137,12 @@ public function handle(GetResponseEvent $event) } } - private function migrateSession(Request $request) + private function migrateSession(Request $request, TokenInterface $token) { - if (!$request->hasSession() || !$request->hasPreviousSession()) { + if (!$this->sessionStrategy || !$request->hasSession() || !$request->hasPreviousSession()) { return; } - // Destroying the old session is broken in php 5.4.0 - 5.4.10 - // See https://bugs.php.net/63379 - $destroy = \PHP_VERSION_ID < 50400 || \PHP_VERSION_ID >= 50411; - $request->getSession()->migrate($destroy); + $this->sessionStrategy->onAuthentication($request, $token); } } From 5c2b2bb2ce38b4055f35ffc08984a49694a8f79f Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sun, 10 Jun 2018 12:30:11 +0200 Subject: [PATCH 047/108] fixed CS --- .../Component/Security/Guard/GuardAuthenticatorHandler.php | 2 +- .../Security/Http/Firewall/AbstractPreAuthenticatedListener.php | 2 +- .../Security/Http/Firewall/BasicAuthenticationListener.php | 2 +- .../Security/Http/Firewall/DigestAuthenticationListener.php | 2 +- .../Security/Http/Firewall/SimplePreAuthenticationListener.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php b/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php index 0164ba9235262..7b340a2601cee 100644 --- a/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php +++ b/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php @@ -133,7 +133,7 @@ public function handleAuthenticationFailure(AuthenticationException $authenticat /** * Call this method if your authentication token is stored to a session. * - * @final since version 2.8 + * @final */ public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) { diff --git a/src/Symfony/Component/Security/Http/Firewall/AbstractPreAuthenticatedListener.php b/src/Symfony/Component/Security/Http/Firewall/AbstractPreAuthenticatedListener.php index 6451d882e8b94..062f4521cfbac 100644 --- a/src/Symfony/Component/Security/Http/Firewall/AbstractPreAuthenticatedListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/AbstractPreAuthenticatedListener.php @@ -102,7 +102,7 @@ final public function handle(GetResponseEvent $event) /** * Call this method if your authentication token is stored to a session. * - * @final since version 2.8 + * @final */ public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) { diff --git a/src/Symfony/Component/Security/Http/Firewall/BasicAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/BasicAuthenticationListener.php index 4b14a842dc134..bfc61f3faacf7 100644 --- a/src/Symfony/Component/Security/Http/Firewall/BasicAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/BasicAuthenticationListener.php @@ -99,7 +99,7 @@ public function handle(GetResponseEvent $event) /** * Call this method if your authentication token is stored to a session. * - * @final since version 2.8 + * @final */ public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) { diff --git a/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php index b4853931ca4b0..5bc3c5ea94df9 100644 --- a/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/DigestAuthenticationListener.php @@ -129,7 +129,7 @@ public function handle(GetResponseEvent $event) /** * Call this method if your authentication token is stored to a session. * - * @final since version 2.8 + * @final */ public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) { diff --git a/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php index cdfb06d4fa2e6..9cb90edbe65f7 100644 --- a/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/SimplePreAuthenticationListener.php @@ -68,7 +68,7 @@ public function __construct(TokenStorageInterface $tokenStorage, AuthenticationM /** * Call this method if your authentication token is stored to a session. * - * @final since version 2.8 + * @final */ public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) { From c06f3229decae3950d52b76d5e262d8a6b54a23e Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Fri, 8 Jun 2018 09:36:24 -0400 Subject: [PATCH 048/108] Avoiding session migration for stateless firewall UsernamePasswordJsonAuthenticationListener --- .../Security/Factory/JsonLoginFactory.php | 1 + .../DependencyInjection/SecurityExtension.php | 4 ++ .../Resources/config/security.xml | 3 ++ .../Bundle/SecurityBundle/composer.json | 2 +- ...namePasswordJsonAuthenticationListener.php | 20 ++++++++-- ...PasswordJsonAuthenticationListenerTest.php | 38 +++++++++++++++++++ 6 files changed, 63 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/JsonLoginFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/JsonLoginFactory.php index 5a391ffacaeab..6c7adb032395b 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/JsonLoginFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/JsonLoginFactory.php @@ -89,6 +89,7 @@ protected function createListener($container, $id, $config, $userProvider) $listener->replaceArgument(4, isset($config['success_handler']) ? new Reference($this->createAuthenticationSuccessHandler($container, $id, $config)) : null); $listener->replaceArgument(5, isset($config['failure_handler']) ? new Reference($this->createAuthenticationFailureHandler($container, $id, $config)) : null); $listener->replaceArgument(6, array_intersect_key($config, $this->options)); + $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); $listenerId .= '.'.$id; $container->setDefinition($listenerId, $listener); diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index d8f1db8dd96f4..b17c93f3e90c2 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -377,7 +377,11 @@ private function createFirewall(ContainerBuilder $container, $id, $firewall, &$a $this->logoutOnUserChangeByContextKey[$contextKey] = array($id, $logoutOnUserChange); $listeners[] = new Reference($this->createContextListener($container, $contextKey, $logoutOnUserChange)); + $sessionStrategyId = 'security.authentication.session_strategy'; + } else { + $sessionStrategyId = 'security.authentication.session_strategy_noop'; } + $container->setAlias(new Alias('security.authentication.session_strategy.'.$id, false), $sessionStrategyId); $config->replaceArgument(6, $contextKey); diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml index 515f56db6e8ca..dea2481df457a 100644 --- a/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml +++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml @@ -62,6 +62,9 @@ %security.authentication.session_strategy.strategy% + + none + diff --git a/src/Symfony/Bundle/SecurityBundle/composer.json b/src/Symfony/Bundle/SecurityBundle/composer.json index cc46a01f0f678..ebf39d1beea59 100644 --- a/src/Symfony/Bundle/SecurityBundle/composer.json +++ b/src/Symfony/Bundle/SecurityBundle/composer.json @@ -18,7 +18,7 @@ "require": { "php": "^5.5.9|>=7.0.8", "ext-xml": "*", - "symfony/security": "~3.4.11|^4.0.11", + "symfony/security": "~3.4.12|^4.0.12|^4.1.1", "symfony/dependency-injection": "^3.4.3|^4.0.3", "symfony/http-kernel": "~3.4|~4.0", "symfony/polyfill-php70": "~1.0" diff --git a/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordJsonAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordJsonAuthenticationListener.php index 8bde1e00151e8..d83e94d4b2efb 100644 --- a/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordJsonAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordJsonAuthenticationListener.php @@ -33,6 +33,7 @@ use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Http\HttpUtils; use Symfony\Component\Security\Http\SecurityEvents; +use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface; /** * UsernamePasswordJsonAuthenticationListener is a stateless implementation of @@ -52,6 +53,7 @@ class UsernamePasswordJsonAuthenticationListener implements ListenerInterface private $logger; private $eventDispatcher; private $propertyAccessor; + private $sessionStrategy; public function __construct(TokenStorageInterface $tokenStorage, AuthenticationManagerInterface $authenticationManager, HttpUtils $httpUtils, $providerKey, AuthenticationSuccessHandlerInterface $successHandler = null, AuthenticationFailureHandlerInterface $failureHandler = null, array $options = array(), LoggerInterface $logger = null, EventDispatcherInterface $eventDispatcher = null, PropertyAccessorInterface $propertyAccessor = null) { @@ -139,7 +141,7 @@ private function onSuccess(Request $request, TokenInterface $token) $this->logger->info('User has been authenticated successfully.', array('username' => $token->getUsername())); } - $this->migrateSession($request); + $this->migrateSession($request, $token); $this->tokenStorage->setToken($token); @@ -185,11 +187,21 @@ private function onFailure(Request $request, AuthenticationException $failed) return $response; } - private function migrateSession(Request $request) + /** + * Call this method if your authentication token is stored to a session. + * + * @final since version 3.4 + */ + public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) + { + $this->sessionStrategy = $sessionStrategy; + } + + private function migrateSession(Request $request, TokenInterface $token) { - if (!$request->hasSession() || !$request->hasPreviousSession()) { + if (!$this->sessionStrategy || !$request->hasSession() || !$request->hasPreviousSession()) { return; } - $request->getSession()->migrate(true); + $this->sessionStrategy->onAuthentication($request, $token); } } diff --git a/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordJsonAuthenticationListenerTest.php b/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordJsonAuthenticationListenerTest.php index 74526fcd543e0..d8bb77bb9e818 100644 --- a/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordJsonAuthenticationListenerTest.php +++ b/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordJsonAuthenticationListenerTest.php @@ -212,4 +212,42 @@ public function testAttemptAuthenticationIfRequestPathMatchesCheckPath() $this->listener->handle($event); $this->assertSame('ok', $event->getResponse()->getContent()); } + + public function testNoErrorOnMissingSessionStrategy() + { + $this->createListener(); + $request = new Request(array(), array(), array(), array(), array(), array('HTTP_CONTENT_TYPE' => 'application/json'), '{"username": "dunglas", "password": "foo"}'); + $this->configurePreviousSession($request); + $event = new GetResponseEvent($this->getMockBuilder(KernelInterface::class)->getMock(), $request, KernelInterface::MASTER_REQUEST); + + $this->listener->handle($event); + $this->assertEquals('ok', $event->getResponse()->getContent()); + } + + public function testMigratesViaSessionStrategy() + { + $this->createListener(); + $request = new Request(array(), array(), array(), array(), array(), array('HTTP_CONTENT_TYPE' => 'application/json'), '{"username": "dunglas", "password": "foo"}'); + $this->configurePreviousSession($request); + $event = new GetResponseEvent($this->getMockBuilder(KernelInterface::class)->getMock(), $request, KernelInterface::MASTER_REQUEST); + + $sessionStrategy = $this->getMockBuilder('Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterface')->getMock(); + $sessionStrategy->expects($this->once()) + ->method('onAuthentication') + ->with($request, $this->isInstanceOf(TokenInterface::class)); + $this->listener->setSessionAuthenticationStrategy($sessionStrategy); + + $this->listener->handle($event); + $this->assertEquals('ok', $event->getResponse()->getContent()); + } + + private function configurePreviousSession(Request $request) + { + $session = $this->getMockBuilder('Symfony\Component\HttpFoundation\Session\SessionInterface')->getMock(); + $session->expects($this->any()) + ->method('getName') + ->willReturn('test_session_name'); + $request->setSession($session); + $request->cookies->set('test_session_name', 'session_cookie_val'); + } } From 697a6a0ae4db1c613b47af2f465746b051351e3e Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sun, 10 Jun 2018 12:33:24 +0200 Subject: [PATCH 049/108] fixed CS --- .../Firewall/UsernamePasswordJsonAuthenticationListener.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordJsonAuthenticationListener.php b/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordJsonAuthenticationListener.php index d83e94d4b2efb..61a14823d999a 100644 --- a/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordJsonAuthenticationListener.php +++ b/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordJsonAuthenticationListener.php @@ -190,7 +190,7 @@ private function onFailure(Request $request, AuthenticationException $failed) /** * Call this method if your authentication token is stored to a session. * - * @final since version 3.4 + * @final */ public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyInterface $sessionStrategy) { From 68729cc68abc0c8088868b6426cd8334af7a4cc5 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 11 Jun 2018 14:15:46 +0200 Subject: [PATCH 050/108] [Cache] Fix expiry comparisons in array-based pools --- src/Symfony/Component/Cache/Tests/Fixtures/ArrayCache.php | 2 +- src/Symfony/Component/Cache/Traits/ArrayTrait.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Cache/Tests/Fixtures/ArrayCache.php b/src/Symfony/Component/Cache/Tests/Fixtures/ArrayCache.php index 1a6157e822117..7cdcafd8e5453 100644 --- a/src/Symfony/Component/Cache/Tests/Fixtures/ArrayCache.php +++ b/src/Symfony/Component/Cache/Tests/Fixtures/ArrayCache.php @@ -21,7 +21,7 @@ protected function doContains($id) $expiry = $this->data[$id][1]; - return !$expiry || time() <= $expiry || !$this->doDelete($id); + return !$expiry || time() < $expiry || !$this->doDelete($id); } protected function doSave($id, $data, $lifeTime = 0) diff --git a/src/Symfony/Component/Cache/Traits/ArrayTrait.php b/src/Symfony/Component/Cache/Traits/ArrayTrait.php index b7d2ad6d6299c..88385ed480f34 100644 --- a/src/Symfony/Component/Cache/Traits/ArrayTrait.php +++ b/src/Symfony/Component/Cache/Traits/ArrayTrait.php @@ -44,7 +44,7 @@ public function hasItem($key) { CacheItem::validateKey($key); - return isset($this->expiries[$key]) && ($this->expiries[$key] >= time() || !$this->deleteItem($key)); + return isset($this->expiries[$key]) && ($this->expiries[$key] > time() || !$this->deleteItem($key)); } /** @@ -81,7 +81,7 @@ private function generateItems(array $keys, $now, $f) { foreach ($keys as $i => $key) { try { - if (!$isHit = isset($this->expiries[$key]) && ($this->expiries[$key] >= $now || !$this->deleteItem($key))) { + if (!$isHit = isset($this->expiries[$key]) && ($this->expiries[$key] > $now || !$this->deleteItem($key))) { $this->values[$key] = $value = null; } elseif (!$this->storeSerialized) { $value = $this->values[$key]; From 8b72a6cb2073c0e239ed0cd87f70e8cf2d3c1720 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 11 Jun 2018 15:11:40 +0200 Subject: [PATCH 051/108] fixed CS --- .../Bundle/FrameworkBundle/Routing/DelegatingLoader.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php b/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php index 049887ba35e8b..0755cc161a3f0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php +++ b/src/Symfony/Bundle/FrameworkBundle/Routing/DelegatingLoader.php @@ -87,7 +87,7 @@ public function load($resource, $type = null) try { $controller = $this->parser->parse($controller, false); - @trigger_error(sprintf('Referencing controllers with %s is deprecated since Symfony 4.1. Use %s instead.', $deprecatedNotation, $controller), E_USER_DEPRECATED); + @trigger_error(sprintf('Referencing controllers with %s is deprecated since Symfony 4.1, use "%s" instead.', $deprecatedNotation, $controller), E_USER_DEPRECATED); } catch (\InvalidArgumentException $e) { // unable to optimize unknown notation } @@ -95,7 +95,7 @@ public function load($resource, $type = null) if (1 === substr_count($controller, ':')) { $nonDeprecatedNotation = str_replace(':', '::', $controller); - @trigger_error(sprintf('Referencing controllers with a single colon is deprecated since Symfony 4.1. Use %s instead.', $nonDeprecatedNotation), E_USER_DEPRECATED); + @trigger_error(sprintf('Referencing controllers with a single colon is deprecated since Symfony 4.1, use "%s" instead.', $nonDeprecatedNotation), E_USER_DEPRECATED); } $route->setDefault('_controller', $controller); From 14bbcdb4965b4cc0d0d1e78b363e82e2a25514e6 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 11 Jun 2018 15:18:57 +0200 Subject: [PATCH 052/108] fix deps --- src/Symfony/Bundle/SecurityBundle/composer.json | 2 +- src/Symfony/Component/Security/Http/composer.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/composer.json b/src/Symfony/Bundle/SecurityBundle/composer.json index ebf39d1beea59..fa304be517a22 100644 --- a/src/Symfony/Bundle/SecurityBundle/composer.json +++ b/src/Symfony/Bundle/SecurityBundle/composer.json @@ -18,7 +18,7 @@ "require": { "php": "^5.5.9|>=7.0.8", "ext-xml": "*", - "symfony/security": "~3.4.12|^4.0.12|^4.1.1", + "symfony/security": "~3.4.12|~4.0.12|^4.1.1", "symfony/dependency-injection": "^3.4.3|^4.0.3", "symfony/http-kernel": "~3.4|~4.0", "symfony/polyfill-php70": "~1.0" diff --git a/src/Symfony/Component/Security/Http/composer.json b/src/Symfony/Component/Security/Http/composer.json index 35695079b95bf..9ede332facfa0 100644 --- a/src/Symfony/Component/Security/Http/composer.json +++ b/src/Symfony/Component/Security/Http/composer.json @@ -27,7 +27,7 @@ }, "require-dev": { "symfony/routing": "~2.8|~3.0|~4.0", - "symfony/security-csrf": "^2.8.41|^3.3.17|^3.4.11|^4.0.11", + "symfony/security-csrf": "^2.8.41|~3.3.17|~3.4.11|^4.0.11", "psr/log": "~1.0" }, "conflict": { From 24b6848ea7e3f207fea6750303039684dc0828a5 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 11 Jun 2018 15:57:31 +0200 Subject: [PATCH 053/108] [Serializer] fix CS --- .../AbstractObjectNormalizerTest.php | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index b1d40dcee3e1d..25f4c007d13f0 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -13,6 +13,8 @@ use Doctrine\Common\Annotations\AnnotationReader; use PHPUnit\Framework\TestCase; +use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor; +use Symfony\Component\PropertyInfo\Type; use Symfony\Component\Serializer\Exception\NotNormalizableValueException; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory; use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader; @@ -118,17 +120,17 @@ public function testDenormalizeCollectionDecodedFromXmlWithTwoChildren() private function getDenormalizerForDummyCollection() { - $extractor = $this->getMockBuilder('Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor')->getMock(); + $extractor = $this->getMockBuilder(PhpDocExtractor::class)->getMock(); $extractor->method('getTypes') ->will($this->onConsecutiveCalls( array( - new \Symfony\Component\PropertyInfo\Type( + new Type( 'array', false, null, true, - new \Symfony\Component\PropertyInfo\Type('int'), - new \Symfony\Component\PropertyInfo\Type('object', false, DummyChild::class) + new Type('int'), + new Type('object', false, DummyChild::class) ), ), null @@ -209,13 +211,12 @@ class DummyChild public $bar; } -class SerializerCollectionDummy implements \Symfony\Component\Serializer\SerializerInterface, \Symfony\Component\Serializer\Normalizer\DenormalizerInterface +class SerializerCollectionDummy implements SerializerInterface, DenormalizerInterface { - /** @var \Symfony\Component\Serializer\Normalizer\DenormalizerInterface */ private $normalizers; /** - * @param $normalizers + * @param DenormalizerInterface[] $normalizers */ public function __construct($normalizers) { @@ -233,7 +234,7 @@ public function deserialize($data, $type, $format, array $context = array()) public function denormalize($data, $type, $format = null, array $context = array()) { foreach ($this->normalizers as $normalizer) { - if ($normalizer instanceof \Symfony\Component\Serializer\Normalizer\DenormalizerInterface && $normalizer->supportsDenormalization($data, $type, $format, $context)) { + if ($normalizer instanceof DenormalizerInterface && $normalizer->supportsDenormalization($data, $type, $format, $context)) { return $normalizer->denormalize($data, $type, $format, $context); } } @@ -245,7 +246,7 @@ public function supportsDenormalization($data, $type, $format = null) } } -class AbstractObjectNormalizerCollectionDummy extends \Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer +class AbstractObjectNormalizerCollectionDummy extends AbstractObjectNormalizer { protected function extractAttributes($object, $format = null, array $context = array()) { From fc666f0d80bcb575b7de2a0db151976d9a8f1e68 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 11 Jun 2018 16:29:01 +0200 Subject: [PATCH 054/108] fix typo --- .../FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php index 5f08cce0ab860..3a465275175a2 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php @@ -24,8 +24,8 @@ public function testConstructorApi() /** * @group legacy - * @expectedDeprecation Referencing controllers with foo:bar:baz is deprecated since Symfony 4.1. Use some_parsed::controller instead. - * @expectedDeprecation Referencing controllers with a single colon is deprecated since Symfony 4.1. Use foo::baz instead. + * @expectedDeprecation Referencing controllers with foo:bar:baz is deprecated since Symfony 4.1, use some_parsed::controller instead. + * @expectedDeprecation Referencing controllers with a single colon is deprecated since Symfony 4.1, use foo::baz instead. */ public function testLoad() { From 413af69e1d93d551618114731e9ec1ee49d7f3bd Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 11 Jun 2018 16:41:42 +0200 Subject: [PATCH 055/108] fix typo --- .../FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php index 3a465275175a2..a0ad94b33e02e 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Routing/DelegatingLoaderTest.php @@ -24,8 +24,8 @@ public function testConstructorApi() /** * @group legacy - * @expectedDeprecation Referencing controllers with foo:bar:baz is deprecated since Symfony 4.1, use some_parsed::controller instead. - * @expectedDeprecation Referencing controllers with a single colon is deprecated since Symfony 4.1, use foo::baz instead. + * @expectedDeprecation Referencing controllers with foo:bar:baz is deprecated since Symfony 4.1, use "some_parsed::controller" instead. + * @expectedDeprecation Referencing controllers with a single colon is deprecated since Symfony 4.1, use "foo::baz" instead. */ public function testLoad() { From a0f78a5e0b64205c7b527afff218a8b21216794d Mon Sep 17 00:00:00 2001 From: Christophe Coevoet Date: Tue, 12 Jun 2018 14:15:08 +0200 Subject: [PATCH 056/108] Avoid calling eval when there is no script embedded in the toolbar --- .../Resources/views/Profiler/base_js.html.twig | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig index 0c5967b4e75ce..fb266c554bf9e 100644 --- a/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig +++ b/src/Symfony/Bundle/WebProfilerBundle/Resources/views/Profiler/base_js.html.twig @@ -419,9 +419,10 @@ function(xhr, el) { /* Evaluate in global scope scripts embedded inside the toolbar */ - eval.call({}, ([].slice.call(el.querySelectorAll('script')).map(function (script) { - return script.firstChild.nodeValue; - }).join(';\n'))); + var i, scripts = [].slice.call(el.querySelectorAll('script')); + for (i = 0; i < scripts.length; ++i) { + eval.call({}, scripts[i].firstChild.nodeValue); + } el.style.display = -1 !== xhr.responseText.indexOf('sf-toolbarreset') ? 'block' : 'none'; @@ -440,7 +441,7 @@ } /* Handle toolbar-info position */ - var i, toolbarBlocks = [].slice.call(el.querySelectorAll('.sf-toolbar-block')); + var toolbarBlocks = [].slice.call(el.querySelectorAll('.sf-toolbar-block')); for (i = 0; i < toolbarBlocks.length; ++i) { toolbarBlocks[i].onmouseover = function () { var toolbarInfo = this.querySelectorAll('.sf-toolbar-info')[0]; From 2c0ac93e259c061a9e0b59003424ae28f0ec33e9 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Mon, 11 Jun 2018 18:23:43 -0400 Subject: [PATCH 057/108] Fix bad method call with guard authentication + session migration --- .../Factory/GuardAuthenticationFactory.php | 1 - .../DependencyInjection/SecurityExtension.php | 5 ++++ .../SecurityBundle/Resources/config/guard.xml | 4 +++ .../SecurityExtensionTest.php | 27 +++++++++++++++++++ .../Firewall/GuardAuthenticationListener.php | 2 +- .../Guard/GuardAuthenticatorHandler.php | 21 ++++++++++----- .../Tests/GuardAuthenticatorHandlerTest.php | 12 +++++++++ 7 files changed, 64 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php index bd49cbc932083..533560d6d986d 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php @@ -77,7 +77,6 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $listener = $container->setDefinition($listenerId, new DefinitionDecorator('security.authentication.listener.guard')); $listener->replaceArgument(2, $id); $listener->replaceArgument(3, $authenticatorReferences); - $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); // determine the entryPointId to use $entryPointId = $this->determineEntryPoint($defaultEntryPoint, $config); diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php index 5138eff36719e..0b671d96914d3 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php @@ -39,6 +39,7 @@ class SecurityExtension extends Extension private $factories = array(); private $userProviderFactories = array(); private $expressionLanguage; + private $statelessFirewallKeys = array(); public function __construct() { @@ -89,6 +90,9 @@ public function load(array $configs, ContainerBuilder $container) $this->createAuthorization($config, $container); $this->createRoleHierarchy($config, $container); + $container->getDefinition('security.authentication.guard_handler') + ->replaceArgument(2, $this->statelessFirewallKeys); + if ($config['encoders']) { $this->createEncoders($config['encoders'], $container); } @@ -287,6 +291,7 @@ private function createFirewall(ContainerBuilder $container, $id, $firewall, &$a $listeners[] = new Reference($this->createContextListener($container, $contextKey)); $sessionStrategyId = 'security.authentication.session_strategy'; } else { + $this->statelessFirewallKeys[] = $id; $sessionStrategyId = 'security.authentication.session_strategy_noop'; } $container->setAlias(new Alias('security.authentication.session_strategy.'.$id, false), $sessionStrategyId); diff --git a/src/Symfony/Bundle/SecurityBundle/Resources/config/guard.xml b/src/Symfony/Bundle/SecurityBundle/Resources/config/guard.xml index 80318c243a970..a4e57be0b0048 100644 --- a/src/Symfony/Bundle/SecurityBundle/Resources/config/guard.xml +++ b/src/Symfony/Bundle/SecurityBundle/Resources/config/guard.xml @@ -10,6 +10,10 @@ > + + + + diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php index 72ef2e0c3ed56..6c6b26c48f94d 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php @@ -119,6 +119,33 @@ public function testDisableRoleHierarchyVoter() $this->assertFalse($container->hasDefinition('security.access.role_hierarchy_voter')); } + public function testGuardHandlerIsPassedStatelessFirewalls() + { + $container = $this->getRawContainer(); + + $container->loadFromExtension('security', array( + 'providers' => array( + 'default' => array('id' => 'foo'), + ), + + 'firewalls' => array( + 'some_firewall' => array( + 'pattern' => '^/admin', + 'http_basic' => null, + ), + 'stateless_firewall' => array( + 'pattern' => '/.*', + 'stateless' => true, + 'http_basic' => null, + ), + ), + )); + + $container->compile(); + $definition = $container->getDefinition('security.authentication.guard_handler'); + $this->assertSame(array('stateless_firewall'), $definition->getArgument(2)); + } + protected function getRawContainer() { $container = new ContainerBuilder(); diff --git a/src/Symfony/Component/Security/Guard/Firewall/GuardAuthenticationListener.php b/src/Symfony/Component/Security/Guard/Firewall/GuardAuthenticationListener.php index ed0a36e9dca5d..8184406fc696d 100644 --- a/src/Symfony/Component/Security/Guard/Firewall/GuardAuthenticationListener.php +++ b/src/Symfony/Component/Security/Guard/Firewall/GuardAuthenticationListener.php @@ -117,7 +117,7 @@ private function executeGuardAuthenticator($uniqueGuardKey, GuardAuthenticatorIn } // sets the token on the token storage, etc - $this->guardHandler->authenticateWithToken($token, $request); + $this->guardHandler->authenticateWithToken($token, $request, $this->providerKey); } catch (AuthenticationException $e) { // oh no! Authentication failed! diff --git a/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php b/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php index 7b340a2601cee..d715c805824e9 100644 --- a/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php +++ b/src/Symfony/Component/Security/Guard/GuardAuthenticatorHandler.php @@ -35,19 +35,28 @@ class GuardAuthenticatorHandler private $tokenStorage; private $dispatcher; private $sessionStrategy; + private $statelessProviderKeys; - public function __construct(TokenStorageInterface $tokenStorage, EventDispatcherInterface $eventDispatcher = null) + /** + * @param array $statelessProviderKeys An array of provider/firewall keys that are "stateless" and so do not need the session migrated on success + */ + public function __construct(TokenStorageInterface $tokenStorage, EventDispatcherInterface $eventDispatcher = null, array $statelessProviderKeys = array()) { $this->tokenStorage = $tokenStorage; $this->dispatcher = $eventDispatcher; + $this->statelessProviderKeys = $statelessProviderKeys; } /** * Authenticates the given token in the system. + * + * @param string $providerKey The name of the provider/firewall being used for authentication */ - public function authenticateWithToken(TokenInterface $token, Request $request) + public function authenticateWithToken(TokenInterface $token, Request $request/*, string $providerKey */) { - $this->migrateSession($request, $token); + $providerKey = \func_num_args() > 2 ? func_get_arg(2) : null; + + $this->migrateSession($request, $token, $providerKey); $this->tokenStorage->setToken($token); if (null !== $this->dispatcher) { @@ -98,7 +107,7 @@ public function authenticateUserAndHandleSuccess(UserInterface $user, Request $r // create an authenticated token for the User $token = $authenticator->createAuthenticatedToken($user, $providerKey); // authenticate this in the system - $this->authenticateWithToken($token, $request); + $this->authenticateWithToken($token, $request, $providerKey); // return the success metric return $this->handleAuthenticationSuccess($token, $request, $authenticator, $providerKey); @@ -140,9 +149,9 @@ public function setSessionAuthenticationStrategy(SessionAuthenticationStrategyIn $this->sessionStrategy = $sessionStrategy; } - private function migrateSession(Request $request, TokenInterface $token) + private function migrateSession(Request $request, TokenInterface $token, $providerKey) { - if (!$this->sessionStrategy || !$request->hasSession() || !$request->hasPreviousSession()) { + if (!$this->sessionStrategy || !$request->hasSession() || !$request->hasPreviousSession() || \in_array($providerKey, $this->statelessProviderKeys, true)) { return; } diff --git a/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php b/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php index 49ce6548acab5..f7a8de7affd01 100644 --- a/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php +++ b/src/Symfony/Component/Security/Guard/Tests/GuardAuthenticatorHandlerTest.php @@ -143,6 +143,18 @@ public function testSessionStrategyIsCalled() $handler->authenticateWithToken($this->token, $this->request); } + public function testSessionStrategyIsNotCalledWhenStateless() + { + $this->configurePreviousSession(); + + $this->sessionStrategy->expects($this->never()) + ->method('onAuthentication'); + + $handler = new GuardAuthenticatorHandler($this->tokenStorage, $this->dispatcher, array('some_provider_key')); + $handler->setSessionAuthenticationStrategy($this->sessionStrategy); + $handler->authenticateWithToken($this->token, $this->request, 'some_provider_key'); + } + protected function setUp() { $this->tokenStorage = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface')->getMock(); From 516ff5a9853eea3f63c92221d35fee3d947748d8 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 6 Jun 2018 22:11:23 +0200 Subject: [PATCH 058/108] [FrameworkBundle] give access to non-shared services when using test.service_container --- .../TestServiceContainerRefPassesTest.php | 58 +++++++++++++++++++ .../Bundle/FrameworkBundle/composer.json | 2 +- .../Compiler/InlineServiceDefinitionsPass.php | 6 ++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/TestServiceContainerRefPassesTest.php diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/TestServiceContainerRefPassesTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/TestServiceContainerRefPassesTest.php new file mode 100644 index 0000000000000..22053a9b2c739 --- /dev/null +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Compiler/TestServiceContainerRefPassesTest.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection\Compiler; + +use PHPUnit\Framework\TestCase; +use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TestServiceContainerWeakRefPass; +use Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler\TestServiceContainerRealRefPass; +use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Compiler\PassConfig; +use Symfony\Component\DependencyInjection\ServiceLocator; +use Symfony\Component\DependencyInjection\Reference; + +class TestServiceContainerRefPassesTest extends TestCase +{ + public function testProcess() + { + $container = new ContainerBuilder(); + $container->register('test.private_services_locator', ServiceLocator::class) + ->setPublic(true) + ->addArgument(0, array()); + + $container->addCompilerPass(new TestServiceContainerWeakRefPass(), PassConfig::TYPE_BEFORE_REMOVING, -32); + $container->addCompilerPass(new TestServiceContainerRealRefPass(), PassConfig::TYPE_AFTER_REMOVING); + + $container->register('Test\public_service') + ->setPublic(true) + ->addArgument(new Reference('Test\private_used_shared_service')) + ->addArgument(new Reference('Test\private_used_non_shared_service')) + ; + + $container->register('Test\private_used_shared_service'); + $container->register('Test\private_unused_shared_service'); + $container->register('Test\private_used_non_shared_service')->setShared(false); + $container->register('Test\private_unused_non_shared_service')->setShared(false); + + $container->compile(); + + $expected = array( + 'Test\private_used_shared_service' => new ServiceClosureArgument(new Reference('Test\private_used_shared_service')), + 'Test\private_used_non_shared_service' => new ServiceClosureArgument(new Reference('Test\private_used_non_shared_service')), + 'Psr\Container\ContainerInterface' => new ServiceClosureArgument(new Reference('service_container')), + 'Symfony\Component\DependencyInjection\ContainerInterface' => new ServiceClosureArgument(new Reference('service_container')), + ); + $this->assertEquals($expected, $container->getDefinition('test.private_services_locator')->getArgument(0)); + $this->assertSame($container, $container->get('test.private_services_locator')->get('Psr\Container\ContainerInterface')); + $this->assertFalse($container->getDefinition('Test\private_used_non_shared_service')->isShared()); + } +} diff --git a/src/Symfony/Bundle/FrameworkBundle/composer.json b/src/Symfony/Bundle/FrameworkBundle/composer.json index 08e2f4ead0619..0c2a3dec226d8 100644 --- a/src/Symfony/Bundle/FrameworkBundle/composer.json +++ b/src/Symfony/Bundle/FrameworkBundle/composer.json @@ -19,7 +19,7 @@ "php": "^7.1.3", "ext-xml": "*", "symfony/cache": "~3.4|~4.0", - "symfony/dependency-injection": "^4.1", + "symfony/dependency-injection": "^4.1.1", "symfony/config": "~3.4|~4.0", "symfony/event-dispatcher": "^4.1", "symfony/http-foundation": "^4.1", diff --git a/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php index 9aee66c8e0d5b..12b6798804e34 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php @@ -93,6 +93,12 @@ private function isInlineableDefinition($id, Definition $definition, ServiceRefe } if (!$definition->isShared()) { + foreach ($graph->getNode($id)->getInEdges() as $edge) { + if ($edge->isWeak()) { + return false; + } + } + return true; } From 39dd9b2f9793571df6d4e46fbdc5ceef482ffbe0 Mon Sep 17 00:00:00 2001 From: Sepehr Lajevardi Date: Thu, 14 Jun 2018 11:11:11 +0430 Subject: [PATCH 059/108] [Cache] Fix typo in comment. --- src/Symfony/Component/Cache/Traits/RedisTrait.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Cache/Traits/RedisTrait.php b/src/Symfony/Component/Cache/Traits/RedisTrait.php index 9fc6177c6bd78..b247b115fa2c0 100644 --- a/src/Symfony/Component/Cache/Traits/RedisTrait.php +++ b/src/Symfony/Component/Cache/Traits/RedisTrait.php @@ -197,7 +197,7 @@ protected function doHave($id) protected function doClear($namespace) { // When using a native Redis cluster, clearing the cache is done by versioning in AbstractTrait::clear(). - // This means old keys are not really removed until they expire and may need gargage collection. + // This means old keys are not really removed until they expire and may need garbage collection. $cleared = true; $hosts = array($this->redis); From 198bee0916fb62ca209c3623709c9066b4559a71 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 11 Jun 2018 16:08:45 +0200 Subject: [PATCH 060/108] [ProxyManagerBridge] Fixed support of private services --- .../LazyProxy/PhpDumper/ProxyDumper.php | 2 +- .../LazyProxy/PhpDumper/ProxyDumperTest.php | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bridge/ProxyManager/LazyProxy/PhpDumper/ProxyDumper.php b/src/Symfony/Bridge/ProxyManager/LazyProxy/PhpDumper/ProxyDumper.php index 316cc8250173f..4a54cc7658e6b 100644 --- a/src/Symfony/Bridge/ProxyManager/LazyProxy/PhpDumper/ProxyDumper.php +++ b/src/Symfony/Bridge/ProxyManager/LazyProxy/PhpDumper/ProxyDumper.php @@ -57,7 +57,7 @@ public function getProxyFactoryCode(Definition $definition, $id, $factoryCode = $instantiation = 'return'; if ($definition->isShared()) { - $instantiation .= " \$this->services['$id'] ="; + $instantiation .= sprintf(' $this->%s[\'%s\'] =', $definition->isPublic() && !$definition->isPrivate() ? 'services' : 'privates', $id); } if (null === $factoryCode) { diff --git a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/ProxyDumperTest.php b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/ProxyDumperTest.php index b4ce2106d8f2b..357b26844c364 100644 --- a/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/ProxyDumperTest.php +++ b/src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/PhpDumper/ProxyDumperTest.php @@ -83,6 +83,34 @@ public function testGetProxyFactoryCode() ); } + /** + * @dataProvider getPrivatePublicDefinitions + */ + public function testCorrectAssigning(Definition $definition, $access) + { + $definition->setLazy(true); + + $code = $this->dumper->getProxyFactoryCode($definition, 'foo', '$this->getFoo2Service(false)'); + + $this->assertStringMatchesFormat('%A$this->'.$access.'[\'foo\'] = %A', $code); + } + + public function getPrivatePublicDefinitions() + { + return array( + array( + (new Definition(__CLASS__)) + ->setPublic(false), + 'privates', + ), + array( + (new Definition(__CLASS__)) + ->setPublic(true), + 'services', + ), + ); + } + /** * @group legacy */ From 3ecabfc36e976b209ed3a6f90093091a1ccd0e13 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 13 Jun 2018 13:43:13 +0200 Subject: [PATCH 061/108] [VarDumper] Fix dumping ArrayObject and ArrayIterator instances --- .../Component/VarDumper/Caster/SplCaster.php | 53 ++++++++++--------- .../VarDumper/Cloner/AbstractCloner.php | 1 + .../VarDumper/Tests/Caster/SplCasterTest.php | 47 ++++++++++++++++ 3 files changed, 77 insertions(+), 24 deletions(-) diff --git a/src/Symfony/Component/VarDumper/Caster/SplCaster.php b/src/Symfony/Component/VarDumper/Caster/SplCaster.php index f3a333a7e7099..73f152ab18b0c 100644 --- a/src/Symfony/Component/VarDumper/Caster/SplCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/SplCaster.php @@ -29,30 +29,12 @@ class SplCaster public static function castArrayObject(\ArrayObject $c, array $a, Stub $stub, $isNested) { - $prefix = Caster::PREFIX_VIRTUAL; - $class = $stub->class; - $flags = $c->getFlags(); - - $b = array( - $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST), - $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS), - $prefix.'iteratorClass' => $c->getIteratorClass(), - $prefix.'storage' => $c->getArrayCopy(), - ); - - if ('ArrayObject' === $class) { - $a = $b; - } else { - if (!($flags & \ArrayObject::STD_PROP_LIST)) { - $c->setFlags(\ArrayObject::STD_PROP_LIST); - $a = Caster::castObject($c, new \ReflectionClass($class)); - $c->setFlags($flags); - } - - $a += $b; - } + return self::castSplArray($c, $a, $stub, $isNested); + } - return $a; + public static function castArrayIterator(\ArrayIterator $c, array $a, Stub $stub, $isNested) + { + return self::castSplArray($c, $a, $stub, $isNested); } public static function castHeap(\Iterator $c, array $a, Stub $stub, $isNested) @@ -182,7 +164,7 @@ public static function castObjectStorage(\SplObjectStorage $c, array $a, Stub $s $clone = clone $c; foreach ($clone as $obj) { - $storage[spl_object_hash($obj)] = array( + $storage[] = array( 'object' => $obj, 'info' => $clone->getInfo(), ); @@ -201,4 +183,27 @@ public static function castOuterIterator(\OuterIterator $c, array $a, Stub $stub return $a; } + + private static function castSplArray($c, array $a, Stub $stub, $isNested) + { + $prefix = Caster::PREFIX_VIRTUAL; + $class = $stub->class; + $flags = $c->getFlags(); + + if (!($flags & \ArrayObject::STD_PROP_LIST)) { + $c->setFlags(\ArrayObject::STD_PROP_LIST); + $a = Caster::castObject($c, new \ReflectionClass($class)); + $c->setFlags($flags); + } + $a += array( + $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST), + $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS), + ); + if ($c instanceof \ArrayObject) { + $a[$prefix.'iteratorClass'] = $c->getIteratorClass(); + } + $a[$prefix.'storage'] = $c->getArrayCopy(); + + return $a; + } } diff --git a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php index bd42cc727e742..cc924ec2520d7 100644 --- a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php +++ b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php @@ -89,6 +89,7 @@ abstract class AbstractCloner implements ClonerInterface 'AMQPEnvelope' => 'Symfony\Component\VarDumper\Caster\AmqpCaster::castEnvelope', 'ArrayObject' => 'Symfony\Component\VarDumper\Caster\SplCaster::castArrayObject', + 'ArrayIterator' => 'Symfony\Component\VarDumper\Caster\SplCaster::castArrayIterator', 'SplDoublyLinkedList' => 'Symfony\Component\VarDumper\Caster\SplCaster::castDoublyLinkedList', 'SplFileInfo' => 'Symfony\Component\VarDumper\Caster\SplCaster::castFileInfo', 'SplFileObject' => 'Symfony\Component\VarDumper\Caster\SplCaster::castFileObject', diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php index 2aa8aee119e84..545783995d646 100644 --- a/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php @@ -160,4 +160,51 @@ public function testCastObjectStorageDumpsInfo() $this->assertDumpMatchesFormat('%ADateTime%A', $var); } + + public function testCastArrayObject() + { + if (\defined('HHVM_VERSION')) { + $this->markTestSkipped('HHVM as different internal details.'); + } + $var = new \ArrayObject(array(123)); + $var->foo = 234; + + $expected = << 123 + ] +} +EOTXT; + $this->assertDumpEquals($expected, $var); + } + + public function testArrayIterator() + { + if (\defined('HHVM_VERSION')) { + $this->markTestSkipped('HHVM as different internal details.'); + } + $var = new MyArrayIterator(array(234)); + + $expected = << 234 + ] +} +EOTXT; + $this->assertDumpEquals($expected, $var); + } +} + +class MyArrayIterator extends \ArrayIterator +{ + private $foo = 123; } From aa432743f5ec7a152bf693eeb25e24a43019eb90 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 15 Jun 2018 09:52:13 +0200 Subject: [PATCH 062/108] remove HHVM code --- .../Component/VarDumper/Tests/Caster/SplCasterTest.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php index d3c9ec25f5f6d..2d7e73a916713 100644 --- a/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Caster/SplCasterTest.php @@ -166,9 +166,6 @@ public function testCastObjectStorageDumpsInfo() public function testCastArrayObject() { - if (\defined('HHVM_VERSION')) { - $this->markTestSkipped('HHVM as different internal details.'); - } $var = new \ArrayObject(array(123)); $var->foo = 234; @@ -188,9 +185,6 @@ public function testCastArrayObject() public function testArrayIterator() { - if (\defined('HHVM_VERSION')) { - $this->markTestSkipped('HHVM as different internal details.'); - } $var = new MyArrayIterator(array(234)); $expected = << Date: Fri, 15 Jun 2018 10:15:34 +0200 Subject: [PATCH 063/108] fix merge --- .../Tests/DependencyInjection/SecurityExtensionTest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php index 101e718f62d50..0a92a5877c952 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/SecurityExtensionTest.php @@ -136,13 +136,11 @@ public function testGuardHandlerIsPassedStatelessFirewalls() 'some_firewall' => array( 'pattern' => '^/admin', 'http_basic' => null, - 'logout_on_user_change' => true, ), 'stateless_firewall' => array( 'pattern' => '/.*', 'stateless' => true, 'http_basic' => null, - 'logout_on_user_change' => true, ), ), )); From 6104c28c08dead3b6e43459605b74e9248918d2b Mon Sep 17 00:00:00 2001 From: Valentin Udaltsov Date: Thu, 14 Jun 2018 03:19:59 +0300 Subject: [PATCH 064/108] [Framework][Workflow] Added support for interfaces --- .../FrameworkBundle/DependencyInjection/Configuration.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 74f092a3d840c..f806e49746f9c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -329,8 +329,8 @@ private function addWorkflowSection(ArrayNodeDefinition $rootNode) ->prototype('scalar') ->cannotBeEmpty() ->validate() - ->ifTrue(function ($v) { return !class_exists($v); }) - ->thenInvalid('The supported class %s does not exist.') + ->ifTrue(function ($v) { return !class_exists($v) && !interface_exists($v); }) + ->thenInvalid('The supported class or interface "%s" does not exist.') ->end() ->end() ->end() From 4cec0e1260e39a3f93adb47e5851fd1473ba04f0 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sat, 16 Jun 2018 10:34:48 +0200 Subject: [PATCH 065/108] [HttpKernel] Fix resetting DumpDataCollector::$isCollected --- .../Component/HttpKernel/DataCollector/DumpDataCollector.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php index 27a9a825243a2..be06a61c40ff1 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php @@ -171,7 +171,7 @@ public function reset() } $this->data = array(); $this->dataCount = 0; - $this->isCollected = false; + $this->isCollected = true; $this->clonesCount = 0; $this->clonesIndex = 0; } From 13e983a127b9a55aa7ffebe8da3ff88958f712ef Mon Sep 17 00:00:00 2001 From: Robin Chalas Date: Mon, 18 Jun 2018 11:28:47 +0200 Subject: [PATCH 066/108] Fix merge --- .../Security/Factory/GuardAuthenticationFactory.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php index 852a6d14ccc84..d18d2a92f06fb 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Security/Factory/GuardAuthenticationFactory.php @@ -80,7 +80,6 @@ public function create(ContainerBuilder $container, $id, $config, $userProvider, $listener = $container->setDefinition($listenerId, new ChildDefinition('security.authentication.listener.guard')); $listener->replaceArgument(2, $id); $listener->replaceArgument(3, $authenticators); - $listener->addMethodCall('setSessionAuthenticationStrategy', array(new Reference('security.authentication.session_strategy.'.$id))); // determine the entryPointId to use $entryPointId = $this->determineEntryPoint($defaultEntryPoint, $config); From dae704ad2f9f0325b3d34be4683daf0fd7f652fb Mon Sep 17 00:00:00 2001 From: "karl.rixon" Date: Fri, 25 May 2018 14:40:09 +0100 Subject: [PATCH 067/108] Fix #27378: Error when rendering a DateIntervalType form with exactly 0 weeks --- .../DateIntervalToArrayTransformer.php | 2 +- .../DateIntervalToArrayTransformerTest.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateIntervalToArrayTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateIntervalToArrayTransformer.php index f5004241f3a99..5e0e73fe21660 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateIntervalToArrayTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/DateIntervalToArrayTransformer.php @@ -89,7 +89,7 @@ public function transform($dateInterval) $result[$field] = $dateInterval->format('%'.($this->pad ? strtoupper($char) : $char)); } if (in_array('weeks', $this->fields, true)) { - $result['weeks'] = 0; + $result['weeks'] = '0'; if (isset($result['days']) && (int) $result['days'] >= 7) { $result['weeks'] = (string) floor($result['days'] / 7); $result['days'] = (string) ($result['days'] % 7); diff --git a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalToArrayTransformerTest.php b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalToArrayTransformerTest.php index 81e6b3bc6cf66..e5735dfca34f6 100644 --- a/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalToArrayTransformerTest.php +++ b/src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateIntervalToArrayTransformerTest.php @@ -90,6 +90,21 @@ public function testTransformWithWeek() $this->assertSame($output, $input); } + public function testTransformWithZeroWeek() + { + $transformer = new DateIntervalToArrayTransformer(array('weeks', 'minutes', 'seconds')); + $input = new \DateInterval('P1Y2M0WT4H5M6S'); + $output = array( + 'weeks' => '0', + 'minutes' => '5', + 'seconds' => '6', + ); + $input = $transformer->transform($input); + ksort($input); + ksort($output); + $this->assertSame($output, $input); + } + public function testTransformDaysToWeeks() { $transformer = new DateIntervalToArrayTransformer(array('weeks', 'minutes', 'seconds')); From 079b944077ec523303b0ea89188565c9a611bea2 Mon Sep 17 00:00:00 2001 From: MatTheCat Date: Mon, 18 Jun 2018 15:48:40 +0200 Subject: [PATCH 068/108] Ensure updateTimestamp returns a boolean --- .../Session/Storage/Handler/RedisSessionHandler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/RedisSessionHandler.php b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/RedisSessionHandler.php index 974d930e90868..59242ef387f81 100644 --- a/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/RedisSessionHandler.php +++ b/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/RedisSessionHandler.php @@ -100,6 +100,6 @@ public function gc($maxlifetime): bool */ public function updateTimestamp($sessionId, $data) { - return $this->redis->expire($this->prefix.$sessionId, (int) ini_get('session.gc_maxlifetime')); + return (bool) $this->redis->expire($this->prefix.$sessionId, (int) ini_get('session.gc_maxlifetime')); } } From 0bc53d66c0c09fb5b7536e1ceb02b5baceaa3936 Mon Sep 17 00:00:00 2001 From: Gautier Deuette Date: Mon, 18 Jun 2018 14:21:59 +0200 Subject: [PATCH 069/108] [Validator] Remove BOM in some xlf files --- .../Component/Form/Resources/translations/validators.hy.xlf | 4 ++-- .../Component/Form/Resources/translations/validators.lt.xlf | 4 ++-- .../Component/Form/Resources/translations/validators.mn.xlf | 2 +- .../Component/Form/Resources/translations/validators.ru.xlf | 4 ++-- .../Validator/Resources/translations/validators.lt.xlf | 2 +- .../Validator/Resources/translations/validators.mn.xlf | 2 +- .../Validator/Resources/translations/validators.ru.xlf | 2 +- .../Validator/Resources/translations/validators.uk.xlf | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Component/Form/Resources/translations/validators.hy.xlf b/src/Symfony/Component/Form/Resources/translations/validators.hy.xlf index 5a6091f890545..7550cb1b5818e 100644 --- a/src/Symfony/Component/Form/Resources/translations/validators.hy.xlf +++ b/src/Symfony/Component/Form/Resources/translations/validators.hy.xlf @@ -1,4 +1,4 @@ - + @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/src/Symfony/Component/Form/Resources/translations/validators.lt.xlf b/src/Symfony/Component/Form/Resources/translations/validators.lt.xlf index 25f30887bc1bf..e9eebc7389739 100644 --- a/src/Symfony/Component/Form/Resources/translations/validators.lt.xlf +++ b/src/Symfony/Component/Form/Resources/translations/validators.lt.xlf @@ -1,4 +1,4 @@ - + @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/src/Symfony/Component/Form/Resources/translations/validators.mn.xlf b/src/Symfony/Component/Form/Resources/translations/validators.mn.xlf index 002b01c175b8f..171df74d63c0c 100644 --- a/src/Symfony/Component/Form/Resources/translations/validators.mn.xlf +++ b/src/Symfony/Component/Form/Resources/translations/validators.mn.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/Symfony/Component/Form/Resources/translations/validators.ru.xlf b/src/Symfony/Component/Form/Resources/translations/validators.ru.xlf index 8d829f1b46ea4..fbbbeb442297c 100644 --- a/src/Symfony/Component/Form/Resources/translations/validators.ru.xlf +++ b/src/Symfony/Component/Form/Resources/translations/validators.ru.xlf @@ -1,4 +1,4 @@ - + @@ -16,4 +16,4 @@ - \ No newline at end of file + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf index a556c45f0c42f..6bdb8142a33e2 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.lt.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf index dfe7eebf6d53e..4be2198aa3b27 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.mn.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf index d7a90c907ed08..3ce5e6e9d4330 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.ru.xlf @@ -1,4 +1,4 @@ - + diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf index 02ecd5a687c93..3b1f28631b411 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.uk.xlf @@ -1,4 +1,4 @@ - + From 5922507dc5a51f8a3b03c92e1fc8e674ce306ced Mon Sep 17 00:00:00 2001 From: Vladimir Reznichenko Date: Sun, 17 Jun 2018 21:23:55 +0200 Subject: [PATCH 070/108] [minor] SCA --- .../Tests/DependencyInjection/DoctrineExtensionTest.php | 4 +--- .../FrameworkBundle/Console/Descriptor/TextDescriptor.php | 2 +- .../Tests/Functional/UserPasswordEncoderCommandTest.php | 2 +- .../DependencyInjection/Tests/Compiler/IntegrationTest.php | 2 +- .../Component/Intl/Data/Generator/LanguageDataGenerator.php | 4 +--- src/Symfony/Component/Ldap/Adapter/ExtLdap/Connection.php | 2 +- 6 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/DoctrineExtensionTest.php b/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/DoctrineExtensionTest.php index 82558c724af9b..a790441fc24f1 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/DoctrineExtensionTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/DependencyInjection/DoctrineExtensionTest.php @@ -208,9 +208,7 @@ public function testLoadBasicCacheDriver($class, array $config, array $expectedC $definition = $container->getDefinition('doctrine.orm.default_metadata_cache'); $defCalls = $definition->getMethodCalls(); $expectedCalls[] = 'setNamespace'; - $actualCalls = array_map(function ($call) { - return $call[0]; - }, $defCalls); + $actualCalls = array_column($defCalls, 0); $this->assertFalse($definition->isPublic()); $this->assertEquals("%$class%", $definition->getClass()); diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php index ab04ff47f794e..54586bf07afd1 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/TextDescriptor.php @@ -316,7 +316,7 @@ protected function describeContainerDefinition(Definition $definition, array $op } if ($definition->getFile()) { - $tableRows[] = array('Required File', $definition->getFile() ? $definition->getFile() : '-'); + $tableRows[] = array('Required File', $definition->getFile() ?: '-'); } if ($factory = $definition->getFactory()) { diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/UserPasswordEncoderCommandTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/UserPasswordEncoderCommandTest.php index 163aa5ccb41ef..1c6f5c280f2ed 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/Functional/UserPasswordEncoderCommandTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/Functional/UserPasswordEncoderCommandTest.php @@ -86,7 +86,7 @@ public function testEncodePasswordArgon2i() $this->assertContains('Password encoding succeeded', $output); $encoder = new Argon2iPasswordEncoder(); - preg_match('# Encoded password\s+(\$argon2id?\$[\w\d,=\$+\/]+={0,2})\s+#', $output, $matches); + preg_match('# Encoded password\s+(\$argon2id?\$[\w,=\$+\/]+={0,2})\s+#', $output, $matches); $hash = $matches[1]; $this->assertTrue($encoder->isPasswordValid($hash, 'password', null)); } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php index 15c827d8270df..81b5810f94151 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php @@ -123,7 +123,7 @@ public function testProcessInlinesWhenThereAreMultipleReferencesButFromTheSameDe public function testYamlContainerCompiles($directory, $actualServiceId, $expectedServiceId, ContainerBuilder $mainContainer = null) { // allow a container to be passed in, which might have autoconfigure settings - $container = $mainContainer ? $mainContainer : new ContainerBuilder(); + $container = $mainContainer ?: new ContainerBuilder(); $container->setResourceTracking(false); $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Fixtures/yaml/integration/'.$directory)); $loader->load('main.yml'); diff --git a/src/Symfony/Component/Intl/Data/Generator/LanguageDataGenerator.php b/src/Symfony/Component/Intl/Data/Generator/LanguageDataGenerator.php index 52225f4941a1c..565a8726197a9 100644 --- a/src/Symfony/Component/Intl/Data/Generator/LanguageDataGenerator.php +++ b/src/Symfony/Component/Intl/Data/Generator/LanguageDataGenerator.php @@ -157,9 +157,7 @@ protected function generateDataForMeta(BundleReaderInterface $reader, $tempDir) return array( 'Version' => $rootBundle['Version'], 'Languages' => $this->languageCodes, - 'Aliases' => array_map(function (\ResourceBundle $bundle) { - return $bundle['replacement']; - }, iterator_to_array($metadataBundle['alias']['language'])), + 'Aliases' => array_column(iterator_to_array($metadataBundle['alias']['language']), 'replacement'), 'Alpha2ToAlpha3' => $this->generateAlpha2ToAlpha3Mapping($metadataBundle), ); } diff --git a/src/Symfony/Component/Ldap/Adapter/ExtLdap/Connection.php b/src/Symfony/Component/Ldap/Adapter/ExtLdap/Connection.php index 1a6ea28ac6505..5308d484990b2 100644 --- a/src/Symfony/Component/Ldap/Adapter/ExtLdap/Connection.php +++ b/src/Symfony/Component/Ldap/Adapter/ExtLdap/Connection.php @@ -145,7 +145,7 @@ private function connect() private function disconnect() { if ($this->connection && is_resource($this->connection)) { - ldap_close($this->connection); + ldap_unbind($this->connection); } $this->connection = null; From ec6b941738af178d63e11bc09e6f2bb7dabfb46f Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 19 Jun 2018 11:52:17 +0200 Subject: [PATCH 071/108] [Routing] remove unneeded dev dep on doctrine/common --- src/Symfony/Component/Routing/composer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Symfony/Component/Routing/composer.json b/src/Symfony/Component/Routing/composer.json index 7fb49738ef01e..96384910dc8e2 100644 --- a/src/Symfony/Component/Routing/composer.json +++ b/src/Symfony/Component/Routing/composer.json @@ -24,7 +24,6 @@ "symfony/yaml": "^2.0.5|~3.0.0", "symfony/expression-language": "~2.4|~3.0.0", "doctrine/annotations": "~1.0", - "doctrine/common": "~2.2", "psr/log": "~1.0" }, "conflict": { From 7d0ebd41abbe951e4f435da1b1a1ac6277ad123b Mon Sep 17 00:00:00 2001 From: flip111 Date: Wed, 6 Jun 2018 00:03:34 +0100 Subject: [PATCH 072/108] [Finder] Update RealIteratorTestCase --- .../Tests/Iterator/RealIteratorTestCase.php | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php b/src/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php index 94253c7ee7ca2..ce3a4ffeb573b 100644 --- a/src/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php +++ b/src/Symfony/Component/Finder/Tests/Iterator/RealIteratorTestCase.php @@ -60,11 +60,23 @@ public static function setUpBeforeClass() public static function tearDownAfterClass() { - foreach (array_reverse(self::$files) as $file) { - if (DIRECTORY_SEPARATOR === $file[strlen($file) - 1]) { - @rmdir($file); + $paths = new \RecursiveIteratorIterator( + new \RecursiveDirectoryIterator( + self::$tmpDir, + \RecursiveDirectoryIterator::SKIP_DOTS + ), + \RecursiveIteratorIterator::CHILD_FIRST + ); + + foreach ($paths as $path) { + if ($path->isDir()) { + if ($path->isLink()) { + @unlink($path); + } else { + @rmdir($path); + } } else { - @unlink($file); + @unlink($path); } } } From ab86f43d7877a906d22713d7fae793f2076ce3f6 Mon Sep 17 00:00:00 2001 From: Yanick Witschi Date: Fri, 18 May 2018 16:21:08 +0200 Subject: [PATCH 073/108] Fix surrogate not using original request --- .../HttpKernel/HttpCache/HttpCache.php | 6 ++- .../Tests/HttpCache/HttpCacheTest.php | 39 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php b/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php index 81c75ff7403a4..6f467876989b8 100644 --- a/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php +++ b/src/Symfony/Component/HttpKernel/HttpCache/HttpCache.php @@ -185,7 +185,11 @@ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQ // FIXME: catch exceptions and implement a 500 error page here? -> in Varnish, there is a built-in error page mechanism if (HttpKernelInterface::MASTER_REQUEST === $type) { $this->traces = array(); - $this->request = $request; + // Keep a clone of the original request for surrogates so they can access it. + // We must clone here to get a separate instance because the application will modify the request during + // the application flow (we know it always does because we do ourselves by setting REMOTE_ADDR to 127.0.0.1 + // and adding the X-Forwarded-For header, see HttpCache::forward()). + $this->request = clone $request; if (null !== $this->surrogate) { $this->surrogateCacheStrategy = $this->surrogate->createCacheStrategy(); } diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php index 41c2d57833769..ab584a9871c2c 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php @@ -11,9 +11,12 @@ namespace Symfony\Component\HttpKernel\Tests\HttpCache; +use Symfony\Component\HttpKernel\HttpCache\Esi; use Symfony\Component\HttpKernel\HttpCache\HttpCache; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\HttpCache\Store; +use Symfony\Component\HttpKernel\HttpCache\StoreInterface; use Symfony\Component\HttpKernel\HttpKernelInterface; /** @@ -1432,6 +1435,42 @@ public function testDoesNotCacheOptionsRequest() $this->assertHttpKernelIsNotCalled(); $this->assertSame('get', $this->response->getContent()); } + + public function testUsesOriginalRequestForSurrogate() + { + $kernel = $this->getMockBuilder(HttpKernelInterface::class)->getMock(); + $store = $this->getMockBuilder(StoreInterface::class)->getMock(); + + $kernel + ->expects($this->exactly(2)) + ->method('handle') + ->willReturnCallback(function (Request $request) { + $this->assertSame('127.0.0.1', $request->server->get('REMOTE_ADDR')); + + return new Response(); + }); + + $cache = new HttpCache($kernel, + $store, + new Esi() + ); + + $request = Request::create('/'); + $request->server->set('REMOTE_ADDR', '10.0.0.1'); + + // Main request + $cache->handle($request, HttpKernelInterface::MASTER_REQUEST); + + // Main request was now modified by HttpCache + // The surrogate will ask for the request using $this->cache->getRequest() + // which MUST return the original request so the surrogate + // can actually behave like a reverse proxy like e.g. Varnish would. + $this->assertSame('10.0.0.1', $cache->getRequest()->getClientIp()); + $this->assertSame('10.0.0.1', $cache->getRequest()->server->get('REMOTE_ADDR')); + + // Surrogate request + $cache->handle($request, HttpKernelInterface::SUB_REQUEST); + } } class TestKernel implements HttpKernelInterface From e336ebeecf2f7e211a6d3a33e9ced8aa11029658 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Fri, 6 Apr 2018 17:41:22 +0200 Subject: [PATCH 074/108] Fixing GlobResource when inside phar archive When packaging an Sf4 application as a PHAR archive using globs at various locations (`Kernel`, `services.yaml`) most glob files are not found because the `glob()` PHP method [does not support PHAR streams](https://stackoverflow.com/questions/8203188/unexpected-problems-with-php-phar). Using the regex fallback instead when operating inside PHAR archives fixes the behavior for me. --- src/Symfony/Component/Config/Resource/GlobResource.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Config/Resource/GlobResource.php b/src/Symfony/Component/Config/Resource/GlobResource.php index 1edd7cd22e44a..95c6ac629f0d3 100644 --- a/src/Symfony/Component/Config/Resource/GlobResource.php +++ b/src/Symfony/Component/Config/Resource/GlobResource.php @@ -93,7 +93,7 @@ public function getIterator() return; } - if (false === strpos($this->pattern, '/**/') && (defined('GLOB_BRACE') || false === strpos($this->pattern, '{'))) { + if (0 !== strpos($this->prefix, 'phar://') && false === strpos($this->pattern, '/**/') && (defined('GLOB_BRACE') || false === strpos($this->pattern, '{'))) { foreach (glob($this->prefix.$this->pattern, defined('GLOB_BRACE') ? GLOB_BRACE : 0) as $path) { if ($this->recursive && is_dir($path)) { $files = iterator_to_array(new \RecursiveIteratorIterator( From b5ee7c3ccd9a407d847b51652ff7b28f7602447d Mon Sep 17 00:00:00 2001 From: Michael Moravec Date: Tue, 19 Jun 2018 13:59:09 +0200 Subject: [PATCH 075/108] Set serialize_precision explicitly to avoid fancy float rounding --- .../Component/HttpFoundation/Tests/JsonResponseTest.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php b/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php index e15505cc6948e..0559b5ba0ff8d 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/JsonResponseTest.php @@ -16,6 +16,15 @@ class JsonResponseTest extends TestCase { + protected function setUp() + { + parent::setUp(); + + if (!defined('HHVM_VERSION')) { + $this->iniSet('serialize_precision', 14); + } + } + public function testConstructorEmptyCreatesJsonObject() { $response = new JsonResponse(); From 0f2b75213878bb34c4ee4f12d60b7afd9c0dc205 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 19 Jun 2018 22:37:28 +0200 Subject: [PATCH 076/108] [HttpKernel] fix PHP 5.4 compat --- .../Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php index ab584a9871c2c..2c2d015dc9016 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php @@ -16,7 +16,6 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\HttpCache\Store; -use Symfony\Component\HttpKernel\HttpCache\StoreInterface; use Symfony\Component\HttpKernel\HttpKernelInterface; /** @@ -1438,8 +1437,8 @@ public function testDoesNotCacheOptionsRequest() public function testUsesOriginalRequestForSurrogate() { - $kernel = $this->getMockBuilder(HttpKernelInterface::class)->getMock(); - $store = $this->getMockBuilder(StoreInterface::class)->getMock(); + $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock(); + $store = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpCache\StoreInterface')->getMock(); $kernel ->expects($this->exactly(2)) From 09ec9e7cce0eea7747cf51232a9dc78b9f8072e5 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 20 Jun 2018 08:57:17 +0200 Subject: [PATCH 077/108] [Cache] fix Memcached tests --- .../Tests/Adapter/MemcachedAdapterTest.php | 19 ++++++++++++++++++- .../Cache/Tests/Simple/MemcachedCacheTest.php | 19 ++++++++++++++++++- .../Simple/MemcachedCacheTextModeTest.php | 8 +++++++- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php index 76e0608006173..7cdd7c1516b8b 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php @@ -22,6 +22,7 @@ class MemcachedAdapterTest extends AdapterTestCase ); protected static $client; + protected static $enableVersioning = false; public static function setupBeforeClass() { @@ -41,7 +42,23 @@ public function createCachePool($defaultLifetime = 0) { $client = $defaultLifetime ? AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST')) : self::$client; - return new MemcachedAdapter($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); + $adapter = new MemcachedAdapter($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); + + if (self::$enableVersioning) { + $adapter->enableVersioning(); + } + + return $adapter; + } + + public function testClear() + { + self::$enableVersioning = true; + try { + parent::testClear(); + } finally { + self::$enableVersioning = false; + } } public function testOptions() diff --git a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php index b46d7e443dd20..f07bbe238d7cf 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php @@ -23,6 +23,7 @@ class MemcachedCacheTest extends CacheTestCase ); protected static $client; + protected static $enableVersioning = false; public static function setupBeforeClass() { @@ -42,7 +43,23 @@ public function createSimpleCache($defaultLifetime = 0) { $client = $defaultLifetime ? AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), array('binary_protocol' => false)) : self::$client; - return new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); + $adapter = new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); + + if (self::$enableVersioning) { + $adapter->enableVersioning(); + } + + return $adapter; + } + + public function testClear() + { + self::$enableVersioning = true; + try { + parent::testClear(); + } finally { + self::$enableVersioning = false; + } } public function testCreatePersistentConnectionShouldNotDupServerList() diff --git a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php index 43cadf9034846..fd42a841d1eb7 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php @@ -20,6 +20,12 @@ public function createSimpleCache($defaultLifetime = 0) { $client = AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), array('binary_protocol' => false)); - return new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); + $adapter = new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); + + if (self::$enableVersioning) { + $adapter->enableVersioning(); + } + + return $adapter; } } From bb644c1df81966e549598a600dc190fb28b60159 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 20 Jun 2018 10:56:56 +0200 Subject: [PATCH 078/108] Revert "minor #27649 [Cache] fix Memcached tests (nicolas-grekas)" This reverts commit dc323f084c5ad46af63751d3284f0eedb99542b5, reversing changes made to 917b07a5c67e6e206c831c6b7c6869856bd2edb2. --- .../Tests/Adapter/MemcachedAdapterTest.php | 19 +------------------ .../Cache/Tests/Simple/MemcachedCacheTest.php | 19 +------------------ .../Simple/MemcachedCacheTextModeTest.php | 8 +------- 3 files changed, 3 insertions(+), 43 deletions(-) diff --git a/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php b/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php index 7cdd7c1516b8b..76e0608006173 100644 --- a/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php +++ b/src/Symfony/Component/Cache/Tests/Adapter/MemcachedAdapterTest.php @@ -22,7 +22,6 @@ class MemcachedAdapterTest extends AdapterTestCase ); protected static $client; - protected static $enableVersioning = false; public static function setupBeforeClass() { @@ -42,23 +41,7 @@ public function createCachePool($defaultLifetime = 0) { $client = $defaultLifetime ? AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST')) : self::$client; - $adapter = new MemcachedAdapter($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); - - if (self::$enableVersioning) { - $adapter->enableVersioning(); - } - - return $adapter; - } - - public function testClear() - { - self::$enableVersioning = true; - try { - parent::testClear(); - } finally { - self::$enableVersioning = false; - } + return new MemcachedAdapter($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); } public function testOptions() diff --git a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php index f07bbe238d7cf..b46d7e443dd20 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTest.php @@ -23,7 +23,6 @@ class MemcachedCacheTest extends CacheTestCase ); protected static $client; - protected static $enableVersioning = false; public static function setupBeforeClass() { @@ -43,23 +42,7 @@ public function createSimpleCache($defaultLifetime = 0) { $client = $defaultLifetime ? AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), array('binary_protocol' => false)) : self::$client; - $adapter = new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); - - if (self::$enableVersioning) { - $adapter->enableVersioning(); - } - - return $adapter; - } - - public function testClear() - { - self::$enableVersioning = true; - try { - parent::testClear(); - } finally { - self::$enableVersioning = false; - } + return new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); } public function testCreatePersistentConnectionShouldNotDupServerList() diff --git a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php index fd42a841d1eb7..43cadf9034846 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php +++ b/src/Symfony/Component/Cache/Tests/Simple/MemcachedCacheTextModeTest.php @@ -20,12 +20,6 @@ public function createSimpleCache($defaultLifetime = 0) { $client = AbstractAdapter::createConnection('memcached://'.getenv('MEMCACHED_HOST'), array('binary_protocol' => false)); - $adapter = new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); - - if (self::$enableVersioning) { - $adapter->enableVersioning(); - } - - return $adapter; + return new MemcachedCache($client, str_replace('\\', '.', __CLASS__), $defaultLifetime); } } From bef15cebcaddf3a08f7a09db8730e1c113302a92 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 20 Jun 2018 11:04:54 +0200 Subject: [PATCH 079/108] [Cache] Fix exception handling in AbstractTrait::clear() --- .../Cache/Tests/Simple/CacheTestCase.php | 9 ++++++++ .../Component/Cache/Traits/AbstractTrait.php | 21 +++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/Symfony/Component/Cache/Tests/Simple/CacheTestCase.php b/src/Symfony/Component/Cache/Tests/Simple/CacheTestCase.php index 48b972824c2c2..7c8ff572dc934 100644 --- a/src/Symfony/Component/Cache/Tests/Simple/CacheTestCase.php +++ b/src/Symfony/Component/Cache/Tests/Simple/CacheTestCase.php @@ -42,6 +42,7 @@ public function testDefaultLifeTime() } $cache = $this->createSimpleCache(2); + $cache->clear(); $cache->set('key.dlt', 'value'); sleep(1); @@ -50,6 +51,8 @@ public function testDefaultLifeTime() sleep(2); $this->assertNull($cache->get('key.dlt')); + + $cache->clear(); } public function testNotUnserializable() @@ -59,6 +62,7 @@ public function testNotUnserializable() } $cache = $this->createSimpleCache(); + $cache->clear(); $cache->set('foo', new NotUnserializable()); @@ -69,6 +73,8 @@ public function testNotUnserializable() foreach ($cache->getMultiple(array('foo')) as $value) { } $this->assertNull($value); + + $cache->clear(); } public function testPrune() @@ -83,6 +89,7 @@ public function testPrune() /** @var PruneableInterface|CacheInterface $cache */ $cache = $this->createSimpleCache(); + $cache->clear(); $cache->set('foo', 'foo-val', new \DateInterval('PT05S')); $cache->set('bar', 'bar-val', new \DateInterval('PT10S')); @@ -124,6 +131,8 @@ public function testPrune() $cache->prune(); $this->assertFalse($this->isPruned($cache, 'foo')); $this->assertTrue($this->isPruned($cache, 'qux')); + + $cache->clear(); } } diff --git a/src/Symfony/Component/Cache/Traits/AbstractTrait.php b/src/Symfony/Component/Cache/Traits/AbstractTrait.php index 92999a2f3c34d..dcba1c8bab822 100644 --- a/src/Symfony/Component/Cache/Traits/AbstractTrait.php +++ b/src/Symfony/Component/Cache/Traits/AbstractTrait.php @@ -104,17 +104,20 @@ public function hasItem($key) */ public function clear() { - if ($cleared = $this->versioningIsEnabled) { - $this->namespaceVersion = 2; - foreach ($this->doFetch(array('@'.$this->namespace)) as $v) { - $this->namespaceVersion = 1 + (int) $v; - } - $this->namespaceVersion .= ':'; - $cleared = $this->doSave(array('@'.$this->namespace => $this->namespaceVersion), 0); - } $this->deferred = array(); - try { + if ($cleared = $this->versioningIsEnabled) { + $namespaceVersion = 2; + foreach ($this->doFetch(array('@'.$this->namespace)) as $v) { + $namespaceVersion = 1 + (int) $v; + } + $namespaceVersion .= ':'; + $cleared = $this->doSave(array('@'.$this->namespace => $namespaceVersion), 0); + if ($cleared = true === $cleared || array() === $cleared) { + $this->namespaceVersion = $namespaceVersion; + } + } + return $this->doClear($this->namespace) || $cleared; } catch (\Exception $e) { CacheItem::log($this->logger, 'Failed to clear the cache', array('exception' => $e)); From d6b6e9658ce2fd303aca065fbc186a9927fb051e Mon Sep 17 00:00:00 2001 From: Massimiliano Braglia Date: Mon, 18 Jun 2018 23:09:57 +0200 Subject: [PATCH 080/108] [Messenger] Fixed MessengerPass::guessHandledClasses return type --- .../DependencyInjection/MessengerPass.php | 2 +- .../DependencyInjection/MessengerPassTest.php | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php index 7836637dde86c..264f8bfdcdf5c 100644 --- a/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php +++ b/src/Symfony/Component/Messenger/DependencyInjection/MessengerPass.php @@ -185,7 +185,7 @@ private function registerHandlers(ContainerBuilder $container, array $busIds) } } - private function guessHandledClasses(\ReflectionClass $handlerClass, string $serviceId): array + private function guessHandledClasses(\ReflectionClass $handlerClass, string $serviceId): iterable { if ($handlerClass->implementsInterface(MessageSubscriberInterface::class)) { if (!$handledMessages = $handlerClass->getName()::getHandledMessages()) { diff --git a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php index 6c77704adb90f..618604f2396c9 100644 --- a/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php +++ b/src/Symfony/Component/Messenger/Tests/DependencyInjection/MessengerPassTest.php @@ -274,6 +274,23 @@ public function testItRegistersSenderWithoutTagName() $this->assertEquals(array(AmqpSender::class => new Reference(AmqpSender::class)), $container->getDefinition('messenger.sender_locator')->getArgument(0)); } + public function testItShouldNotThrowIfGeneratorIsReturnedInsteadOfArray() + { + $container = $this->getContainerBuilder($busId = 'message_bus'); + $container + ->register(HandlerWithGenerators::class, HandlerWithGenerators::class) + ->addTag('messenger.message_handler') + ; + + (new MessengerPass())->process($container); + + $handlerLocatorDefinition = $container->getDefinition($container->getDefinition("$busId.messenger.handler_resolver")->getArgument(0)); + $handlerMapping = $handlerLocatorDefinition->getArgument(0); + + $this->assertArrayHasKey('handler.'.DummyMessage::class, $handlerMapping); + $this->assertArrayHasKey('handler.'.SecondMessage::class, $handlerMapping); + } + /** * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException * @expectedExceptionMessage Invalid sender "app.messenger.sender": class "Symfony\Component\Messenger\Tests\DependencyInjection\InvalidSender" must implement interface "Symfony\Component\Messenger\Transport\SenderInterface". @@ -685,6 +702,23 @@ public function __invoke() } } +class HandlerWithGenerators implements MessageSubscriberInterface +{ + public static function getHandledMessages(): iterable + { + yield DummyMessage::class => 'dummyMethod'; + yield SecondMessage::class => 'secondMessage'; + } + + public function dummyMethod() + { + } + + public function secondMessage() + { + } +} + class UselessMiddleware implements MiddlewareInterface { public function handle($message, callable $next) From b7ccf10de7f6964d57c184c97e03a1200569ccec Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 20 Jun 2018 11:38:25 +0200 Subject: [PATCH 081/108] [Cache] Improve resiliency when calling doFetch() in AbstractTrait --- .../Component/Cache/Traits/AbstractTrait.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Cache/Traits/AbstractTrait.php b/src/Symfony/Component/Cache/Traits/AbstractTrait.php index dcba1c8bab822..bd9cb63ae60e6 100644 --- a/src/Symfony/Component/Cache/Traits/AbstractTrait.php +++ b/src/Symfony/Component/Cache/Traits/AbstractTrait.php @@ -108,8 +108,11 @@ public function clear() try { if ($cleared = $this->versioningIsEnabled) { $namespaceVersion = 2; - foreach ($this->doFetch(array('@'.$this->namespace)) as $v) { - $namespaceVersion = 1 + (int) $v; + try { + foreach ($this->doFetch(array('@'.$this->namespace)) as $v) { + $namespaceVersion = 1 + (int) $v; + } + } catch (\Exception $e) { } $namespaceVersion .= ':'; $cleared = $this->doSave(array('@'.$this->namespace => $namespaceVersion), 0); @@ -236,8 +239,11 @@ private function getId($key) if ($this->versioningIsEnabled && '' === $this->namespaceVersion) { $this->namespaceVersion = '1:'; - foreach ($this->doFetch(array('@'.$this->namespace)) as $v) { - $this->namespaceVersion = $v; + try { + foreach ($this->doFetch(array('@'.$this->namespace)) as $v) { + $this->namespaceVersion = $v; + } + } catch (\Exception $e) { } } From 2d26a556fd8c583553c994a6fe84832a1b2f074c Mon Sep 17 00:00:00 2001 From: jspee Date: Wed, 20 Jun 2018 16:25:33 +0200 Subject: [PATCH 082/108] change `evaluate()` docblock return type from string to mixed --- src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php b/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php index fae922b739c43..a9941f1aab330 100644 --- a/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php +++ b/src/Symfony/Component/ExpressionLanguage/ExpressionLanguage.php @@ -60,7 +60,7 @@ public function compile($expression, $names = array()) * @param Expression|string $expression The expression to compile * @param array $values An array of values * - * @return string The result of the evaluation of the expression + * @return mixed The result of the evaluation of the expression */ public function evaluate($expression, $values = array()) { From ff0de67519956d0bd16c5b90a65863571693bac1 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 20 Jun 2018 22:30:04 +0200 Subject: [PATCH 083/108] [Cache] more granular handling of exceptions in AbstractTrait::clear() --- .../Component/Cache/Traits/AbstractTrait.php | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Component/Cache/Traits/AbstractTrait.php b/src/Symfony/Component/Cache/Traits/AbstractTrait.php index bd9cb63ae60e6..7953ae6e8beee 100644 --- a/src/Symfony/Component/Cache/Traits/AbstractTrait.php +++ b/src/Symfony/Component/Cache/Traits/AbstractTrait.php @@ -105,22 +105,26 @@ public function hasItem($key) public function clear() { $this->deferred = array(); - try { - if ($cleared = $this->versioningIsEnabled) { - $namespaceVersion = 2; - try { - foreach ($this->doFetch(array('@'.$this->namespace)) as $v) { - $namespaceVersion = 1 + (int) $v; - } - } catch (\Exception $e) { + if ($cleared = $this->versioningIsEnabled) { + $namespaceVersion = 2; + try { + foreach ($this->doFetch(array('@'.$this->namespace)) as $v) { + $namespaceVersion = 1 + (int) $v; } - $namespaceVersion .= ':'; + } catch (\Exception $e) { + } + $namespaceVersion .= ':'; + try { $cleared = $this->doSave(array('@'.$this->namespace => $namespaceVersion), 0); - if ($cleared = true === $cleared || array() === $cleared) { - $this->namespaceVersion = $namespaceVersion; - } + } catch (\Exception $e) { + $cleared = false; + } + if ($cleared = true === $cleared || array() === $cleared) { + $this->namespaceVersion = $namespaceVersion; } + } + try { return $this->doClear($this->namespace) || $cleared; } catch (\Exception $e) { CacheItem::log($this->logger, 'Failed to clear the cache', array('exception' => $e)); From 1e10475d88c0628e486850956533e3cdbb264636 Mon Sep 17 00:00:00 2001 From: Valentin Date: Thu, 21 Jun 2018 00:41:56 +0300 Subject: [PATCH 084/108] Ignore keepQueryParams attribute when generating route redirect. --- .../Controller/RedirectController.php | 2 +- .../Controller/RedirectControllerTest.php | 21 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Controller/RedirectController.php b/src/Symfony/Bundle/FrameworkBundle/Controller/RedirectController.php index 67f60b77d690f..45811e5c42e24 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Controller/RedirectController.php +++ b/src/Symfony/Bundle/FrameworkBundle/Controller/RedirectController.php @@ -64,7 +64,7 @@ public function redirectAction(Request $request, string $route, bool $permanent if (false === $ignoreAttributes || is_array($ignoreAttributes)) { $attributes = $request->attributes->get('_route_params'); $attributes = $keepQueryParams ? array_merge($request->query->all(), $attributes) : $attributes; - unset($attributes['route'], $attributes['permanent'], $attributes['ignoreAttributes'], $attributes['keepRequestMethod']); + unset($attributes['route'], $attributes['permanent'], $attributes['ignoreAttributes'], $attributes['keepRequestMethod'], $attributes['keepQueryParams']); if ($ignoreAttributes) { $attributes = array_diff_key($attributes, array_flip($ignoreAttributes)); } diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/RedirectControllerTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/RedirectControllerTest.php index acb607da83a85..cb56338b388bb 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/RedirectControllerTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/Controller/RedirectControllerTest.php @@ -47,7 +47,7 @@ public function testEmptyRoute() /** * @dataProvider provider */ - public function testRoute($permanent, $keepRequestMethod, $ignoreAttributes, $expectedCode, $expectedAttributes) + public function testRoute($permanent, $keepRequestMethod, $keepQueryParams, $ignoreAttributes, $expectedCode, $expectedAttributes) { $request = new Request(); @@ -63,6 +63,7 @@ public function testRoute($permanent, $keepRequestMethod, $ignoreAttributes, $ex 'additional-parameter' => 'value', 'ignoreAttributes' => $ignoreAttributes, 'keepRequestMethod' => $keepRequestMethod, + 'keepQueryParams' => $keepQueryParams, ), ); @@ -77,7 +78,7 @@ public function testRoute($permanent, $keepRequestMethod, $ignoreAttributes, $ex $controller = new RedirectController($router); - $returnResponse = $controller->redirectAction($request, $route, $permanent, $ignoreAttributes, $keepRequestMethod); + $returnResponse = $controller->redirectAction($request, $route, $permanent, $ignoreAttributes, $keepRequestMethod, $keepQueryParams); $this->assertRedirectUrl($returnResponse, $url); $this->assertEquals($expectedCode, $returnResponse->getStatusCode()); @@ -86,14 +87,14 @@ public function testRoute($permanent, $keepRequestMethod, $ignoreAttributes, $ex public function provider() { return array( - array(true, false, false, 301, array('additional-parameter' => 'value')), - array(false, false, false, 302, array('additional-parameter' => 'value')), - array(false, false, true, 302, array()), - array(false, false, array('additional-parameter'), 302, array()), - array(true, true, false, 308, array('additional-parameter' => 'value')), - array(false, true, false, 307, array('additional-parameter' => 'value')), - array(false, true, true, 307, array()), - array(false, true, array('additional-parameter'), 307, array()), + array(true, false, false, false, 301, array('additional-parameter' => 'value')), + array(false, false, false, false, 302, array('additional-parameter' => 'value')), + array(false, false, false, true, 302, array()), + array(false, false, false, array('additional-parameter'), 302, array()), + array(true, true, false, false, 308, array('additional-parameter' => 'value')), + array(false, true, false, false, 307, array('additional-parameter' => 'value')), + array(false, true, false, true, 307, array()), + array(false, true, true, array('additional-parameter'), 307, array()), ); } From 7adb641d7cdd64a96a8ac72d71eae4f74679ea74 Mon Sep 17 00:00:00 2001 From: fritzmg Date: Thu, 21 Jun 2018 11:24:14 +0200 Subject: [PATCH 085/108] fix file lock on SunOS --- src/Symfony/Component/Filesystem/LockHandler.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Filesystem/LockHandler.php b/src/Symfony/Component/Filesystem/LockHandler.php index 517b2f01e64b3..8290e5283ab00 100644 --- a/src/Symfony/Component/Filesystem/LockHandler.php +++ b/src/Symfony/Component/Filesystem/LockHandler.php @@ -75,12 +75,12 @@ public function lock($blocking = false) $error = $msg; }); - if (!$this->handle = fopen($this->file, 'r')) { + if (!$this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r')) { if ($this->handle = fopen($this->file, 'x')) { chmod($this->file, 0444); - } elseif (!$this->handle = fopen($this->file, 'r')) { + } elseif (!$this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r')) { usleep(100); // Give some time for chmod() to complete - $this->handle = fopen($this->file, 'r'); + $this->handle = fopen($this->file, 'r+') ?: fopen($this->file, 'r'); } } restore_error_handler(); From a6696d03b1f223175be4e91c2b9b3027a12896c2 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 20 Jun 2018 21:52:27 +0200 Subject: [PATCH 086/108] fix handling of nested Error instances --- .../Component/HttpKernel/EventListener/ExceptionListener.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php index f18e42c7d3693..983f1c2b8f2b8 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php @@ -64,7 +64,7 @@ public function onKernelException(GetResponseForExceptionEvent $event) } } - $prev = new \ReflectionProperty('Exception', 'previous'); + $prev = new \ReflectionProperty($wrapper instanceof \Exception ? \Exception::class : \Error::class, 'previous'); $prev->setAccessible(true); $prev->setValue($wrapper, $exception); From dca9ff529a05bafd4e44330fd26f06d17f8480db Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Wed, 20 Jun 2018 21:01:59 +0100 Subject: [PATCH 087/108] [Serializer] Updates DocBlock to a mixed param type --- .../Component/Serializer/Normalizer/NormalizerInterface.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php b/src/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php index b1e5bb8599a28..773e26b36dec7 100644 --- a/src/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php +++ b/src/Symfony/Component/Serializer/Normalizer/NormalizerInterface.php @@ -21,7 +21,7 @@ interface NormalizerInterface /** * Normalizes an object into a set of arrays/scalars. * - * @param object $object Object to normalize + * @param mixed $object Object to normalize * @param string $format Format the normalization result will be encoded as * @param array $context Context options for the normalizer * From 749410a2241ec8b92f387722d9646211b08f00bd Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 21 Jun 2018 13:07:36 +0200 Subject: [PATCH 088/108] [HttpKernel] fix test compat with PHP 5.3 --- .../Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php index 2c2d015dc9016..f5b40002460e4 100644 --- a/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/HttpCache/HttpCacheTest.php @@ -1440,11 +1440,12 @@ public function testUsesOriginalRequestForSurrogate() $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpKernelInterface')->getMock(); $store = $this->getMockBuilder('Symfony\Component\HttpKernel\HttpCache\StoreInterface')->getMock(); + $that = $this; $kernel ->expects($this->exactly(2)) ->method('handle') - ->willReturnCallback(function (Request $request) { - $this->assertSame('127.0.0.1', $request->server->get('REMOTE_ADDR')); + ->willReturnCallback(function (Request $request) use ($that) { + $that->assertSame('127.0.0.1', $request->server->get('REMOTE_ADDR')); return new Response(); }); From 9c9ae7d9c96ccbabe094ed998be4998fbe01b6e3 Mon Sep 17 00:00:00 2001 From: Fritz Michael Gschwantner Date: Thu, 21 Jun 2018 09:40:59 +0200 Subject: [PATCH 089/108] [Lock] use 'r+' for fopen (fixes issue on Solaris) --- src/Symfony/Component/Lock/Store/FlockStore.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Lock/Store/FlockStore.php b/src/Symfony/Component/Lock/Store/FlockStore.php index d0317358e89a5..5c5baee29a91d 100644 --- a/src/Symfony/Component/Lock/Store/FlockStore.php +++ b/src/Symfony/Component/Lock/Store/FlockStore.php @@ -79,12 +79,12 @@ private function lock(Key $key, $blocking) // Silence error reporting set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); - if (!$handle = fopen($fileName, 'r')) { + if (!$handle = fopen($fileName, 'r+') ?: fopen($fileName, 'r')) { if ($handle = fopen($fileName, 'x')) { chmod($fileName, 0444); - } elseif (!$handle = fopen($fileName, 'r')) { + } elseif (!$handle = fopen($fileName, 'r+') ?: fopen($fileName, 'r')) { usleep(100); // Give some time for chmod() to complete - $handle = fopen($fileName, 'r'); + $handle = fopen($fileName, 'r+') ?: fopen($fileName, 'r'); } } restore_error_handler(); From 3bd9a6b97e780dddee3f82525c7433cc4d3aed48 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 21 Jun 2018 14:16:06 +0200 Subject: [PATCH 090/108] [Cache] fix visibility of RedisTrait::init() --- src/Symfony/Component/Cache/Traits/RedisTrait.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Cache/Traits/RedisTrait.php b/src/Symfony/Component/Cache/Traits/RedisTrait.php index b247b115fa2c0..5a9592a901549 100644 --- a/src/Symfony/Component/Cache/Traits/RedisTrait.php +++ b/src/Symfony/Component/Cache/Traits/RedisTrait.php @@ -41,7 +41,7 @@ trait RedisTrait /** * @param \Redis|\RedisArray|\RedisCluster|\Predis\Client $redisClient */ - public function init($redisClient, $namespace = '', $defaultLifetime = 0) + private function init($redisClient, $namespace = '', $defaultLifetime = 0) { parent::__construct($namespace, $defaultLifetime); From a67b650f12e5252a5d30c4c94576d73e15f19aef Mon Sep 17 00:00:00 2001 From: Andrew Berry Date: Thu, 21 Jun 2018 13:40:47 -0400 Subject: [PATCH 091/108] allow_extra_attributes does not throw an exception as documented --- .../Normalizer/AbstractNormalizer.php | 6 ++++++ .../AbstractObjectNormalizerTest.php | 21 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index cad6205dfb826..03c44af938929 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -200,11 +200,17 @@ protected function handleCircularReference($object) * @param array $context * @param bool $attributesAsString If false, return an array of {@link AttributeMetadataInterface} * + * @throws \Symfony\Component\Serializer\Exception\LogicException if the 'allow_extra_attributes' context variable is false and no class metadata factory is provided + * * @return string[]|AttributeMetadataInterface[]|bool */ protected function getAllowedAttributes($classOrObject, array $context, $attributesAsString = false) { if (!$this->classMetadataFactory) { + if (isset($context[static::ALLOW_EXTRA_ATTRIBUTES]) && !$context[static::ALLOW_EXTRA_ATTRIBUTES]) { + throw new LogicException(sprintf("A class metadata factory must be provided in the constructor when setting '%s' to false.", static::ALLOW_EXTRA_ATTRIBUTES)); + } + return false; } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index 25f4c007d13f0..19a73c9c8474c 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -19,6 +19,7 @@ use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory; use Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader; use Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer; +use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\SerializerAwareInterface; use Symfony\Component\Serializer\SerializerInterface; @@ -52,7 +53,8 @@ public function testInstantiateObjectDenormalizer() */ public function testDenormalizeWithExtraAttributes() { - $normalizer = new AbstractObjectNormalizerDummy(); + $factory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); + $normalizer = new AbstractObjectNormalizerDummy($factory); $normalizer->denormalize( array('fooFoo' => 'foo', 'fooBar' => 'bar'), __NAMESPACE__.'\Dummy', @@ -144,6 +146,23 @@ private function getDenormalizerForDummyCollection() return $denormalizer; } + + /** + * Test that additional attributes throw an exception if no metadata factory is specified. + * + * @see https://symfony.com/doc/current/components/serializer.html#deserializing-an-object + * + * @expectedException \Symfony\Component\Serializer\Exception\LogicException + * @expectedExceptionMessage A class metadata factory must be provided in the constructor when setting 'allow_extra_attributes' to false. + */ + public function testExtraAttributesException() + { + $normalizer = new ObjectNormalizer(); + + $normalizer->denormalize(array(), \stdClass::class, 'xml', array( + 'allow_extra_attributes' => false, + )); + } } class AbstractObjectNormalizerDummy extends AbstractObjectNormalizer From bdcd0ba56983e86044b0ee07e5d22785bf3d82cd Mon Sep 17 00:00:00 2001 From: Maxime Steinhausser Date: Thu, 21 Jun 2018 22:04:03 +0200 Subject: [PATCH 092/108] [Serializer] Minor tweaks for a67b650f12e5252a5d30c4c94576d73e15f19aef --- .../Component/Serializer/Normalizer/AbstractNormalizer.php | 4 ++-- .../Tests/Normalizer/AbstractObjectNormalizerTest.php | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php index 03c44af938929..eacf755212f6c 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractNormalizer.php @@ -200,7 +200,7 @@ protected function handleCircularReference($object) * @param array $context * @param bool $attributesAsString If false, return an array of {@link AttributeMetadataInterface} * - * @throws \Symfony\Component\Serializer\Exception\LogicException if the 'allow_extra_attributes' context variable is false and no class metadata factory is provided + * @throws LogicException if the 'allow_extra_attributes' context variable is false and no class metadata factory is provided * * @return string[]|AttributeMetadataInterface[]|bool */ @@ -208,7 +208,7 @@ protected function getAllowedAttributes($classOrObject, array $context, $attribu { if (!$this->classMetadataFactory) { if (isset($context[static::ALLOW_EXTRA_ATTRIBUTES]) && !$context[static::ALLOW_EXTRA_ATTRIBUTES]) { - throw new LogicException(sprintf("A class metadata factory must be provided in the constructor when setting '%s' to false.", static::ALLOW_EXTRA_ATTRIBUTES)); + throw new LogicException(sprintf('A class metadata factory must be provided in the constructor when setting "%s" to false.', static::ALLOW_EXTRA_ATTRIBUTES)); } return false; diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index 19a73c9c8474c..d461ef267ff86 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -150,10 +150,8 @@ private function getDenormalizerForDummyCollection() /** * Test that additional attributes throw an exception if no metadata factory is specified. * - * @see https://symfony.com/doc/current/components/serializer.html#deserializing-an-object - * * @expectedException \Symfony\Component\Serializer\Exception\LogicException - * @expectedExceptionMessage A class metadata factory must be provided in the constructor when setting 'allow_extra_attributes' to false. + * @expectedExceptionMessage A class metadata factory must be provided in the constructor when setting "allow_extra_attributes" to false. */ public function testExtraAttributesException() { From afeb89fa065be5ebf7f16437551629b028d51f1c Mon Sep 17 00:00:00 2001 From: Vladimir Reznichenko Date: Thu, 21 Jun 2018 22:10:47 +0200 Subject: [PATCH 093/108] [minor] SCA --- .../Loader/Configurator/DefaultsConfigurator.php | 4 ++-- .../DataTransformer/IntegerToLocalizedStringTransformer.php | 4 ---- .../Core/Authentication/RememberMe/PersistentToken.php | 2 +- src/Symfony/Component/Security/Core/User/LdapUserProvider.php | 4 ---- .../Component/Translation/Extractor/AbstractFileExtractor.php | 2 +- 5 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Loader/Configurator/DefaultsConfigurator.php b/src/Symfony/Component/DependencyInjection/Loader/Configurator/DefaultsConfigurator.php index aec0b2bd21032..07f6b7257e2c7 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/Configurator/DefaultsConfigurator.php +++ b/src/Symfony/Component/DependencyInjection/Loader/Configurator/DefaultsConfigurator.php @@ -34,12 +34,12 @@ class DefaultsConfigurator extends AbstractServiceConfigurator */ final public function tag(string $name, array $attributes = array()) { - if (!is_string($name) || '' === $name) { + if ('' === $name) { throw new InvalidArgumentException('The tag name in "_defaults" must be a non-empty string.'); } foreach ($attributes as $attribute => $value) { - if (!is_scalar($value) && null !== $value) { + if (null !== $value && !is_scalar($value)) { throw new InvalidArgumentException(sprintf('Tag "%s", attribute "%s" in "_defaults" must be of a scalar-type.', $name, $attribute)); } } diff --git a/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php b/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php index 760e8aa664bbc..301ead682bf61 100644 --- a/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php +++ b/src/Symfony/Component/Form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php @@ -28,10 +28,6 @@ class IntegerToLocalizedStringTransformer extends NumberToLocalizedStringTransfo */ public function __construct(?int $scale = 0, ?bool $grouping = false, int $roundingMode = self::ROUND_DOWN) { - if (null === $roundingMode) { - $roundingMode = self::ROUND_DOWN; - } - parent::__construct(0, $grouping, $roundingMode); } diff --git a/src/Symfony/Component/Security/Core/Authentication/RememberMe/PersistentToken.php b/src/Symfony/Component/Security/Core/Authentication/RememberMe/PersistentToken.php index 996ad285fdab0..7c12706e3c3cb 100644 --- a/src/Symfony/Component/Security/Core/Authentication/RememberMe/PersistentToken.php +++ b/src/Symfony/Component/Security/Core/Authentication/RememberMe/PersistentToken.php @@ -29,7 +29,7 @@ public function __construct(string $class, string $username, string $series, str if (empty($class)) { throw new \InvalidArgumentException('$class must not be empty.'); } - if ('' === $username || null === $username) { + if ('' === $username) { throw new \InvalidArgumentException('$username must not be empty.'); } if (empty($series)) { diff --git a/src/Symfony/Component/Security/Core/User/LdapUserProvider.php b/src/Symfony/Component/Security/Core/User/LdapUserProvider.php index fcc3bcdb4236d..b3fa3fa6b94f8 100644 --- a/src/Symfony/Component/Security/Core/User/LdapUserProvider.php +++ b/src/Symfony/Component/Security/Core/User/LdapUserProvider.php @@ -37,10 +37,6 @@ class LdapUserProvider implements UserProviderInterface public function __construct(LdapInterface $ldap, string $baseDn, string $searchDn = null, string $searchPassword = null, array $defaultRoles = array(), string $uidKey = 'sAMAccountName', string $filter = '({uid_key}={username})', string $passwordAttribute = null) { - if (null === $uidKey) { - $uidKey = 'sAMAccountName'; - } - $this->ldap = $ldap; $this->baseDn = $baseDn; $this->searchDn = $searchDn; diff --git a/src/Symfony/Component/Translation/Extractor/AbstractFileExtractor.php b/src/Symfony/Component/Translation/Extractor/AbstractFileExtractor.php index 40b36451dab52..bdfec1a9edc66 100644 --- a/src/Symfony/Component/Translation/Extractor/AbstractFileExtractor.php +++ b/src/Symfony/Component/Translation/Extractor/AbstractFileExtractor.php @@ -45,7 +45,7 @@ protected function extractFiles($resource) private function toSplFileInfo(string $file): \SplFileInfo { - return ($file instanceof \SplFileInfo) ? $file : new \SplFileInfo($file); + return new \SplFileInfo($file); } /** From 5f2e6c2f128adb3e24cf9e4e324540b1af7e508b Mon Sep 17 00:00:00 2001 From: Jakub Zalas Date: Thu, 21 Jun 2018 22:25:54 +0100 Subject: [PATCH 094/108] [Intl] Update ICU data to 62.1 --- src/Symfony/Component/Intl/Intl.php | 2 +- src/Symfony/Component/Intl/Resources/bin/icu.ini | 1 + .../Component/Intl/Resources/data/currencies/af.json | 2 +- .../Component/Intl/Resources/data/currencies/am.json | 2 +- .../Component/Intl/Resources/data/currencies/ar.json | 2 +- .../Component/Intl/Resources/data/currencies/as.json | 2 +- .../Component/Intl/Resources/data/currencies/az.json | 2 +- .../Component/Intl/Resources/data/currencies/be.json | 2 +- .../Component/Intl/Resources/data/currencies/bg.json | 2 +- .../Component/Intl/Resources/data/currencies/bn.json | 2 +- .../Component/Intl/Resources/data/currencies/br.json | 2 +- .../Component/Intl/Resources/data/currencies/bs.json | 2 +- .../Intl/Resources/data/currencies/bs_Cyrl.json | 2 +- .../Component/Intl/Resources/data/currencies/ca.json | 2 +- .../Component/Intl/Resources/data/currencies/ce.json | 2 +- .../Component/Intl/Resources/data/currencies/cs.json | 2 +- .../Component/Intl/Resources/data/currencies/cy.json | 2 +- .../Component/Intl/Resources/data/currencies/da.json | 2 +- .../Component/Intl/Resources/data/currencies/de.json | 2 +- .../Component/Intl/Resources/data/currencies/dz.json | 2 +- .../Component/Intl/Resources/data/currencies/ee.json | 2 +- .../Component/Intl/Resources/data/currencies/el.json | 2 +- .../Component/Intl/Resources/data/currencies/en.json | 2 +- .../Component/Intl/Resources/data/currencies/es.json | 2 +- .../Component/Intl/Resources/data/currencies/es_VE.json | 2 +- .../Component/Intl/Resources/data/currencies/et.json | 2 +- .../Component/Intl/Resources/data/currencies/eu.json | 2 +- .../Component/Intl/Resources/data/currencies/fa.json | 2 +- .../Component/Intl/Resources/data/currencies/fi.json | 2 +- .../Component/Intl/Resources/data/currencies/fo.json | 2 +- .../Component/Intl/Resources/data/currencies/fr.json | 2 +- .../Component/Intl/Resources/data/currencies/fy.json | 2 +- .../Component/Intl/Resources/data/currencies/ga.json | 2 +- .../Component/Intl/Resources/data/currencies/gd.json | 2 +- .../Component/Intl/Resources/data/currencies/gl.json | 2 +- .../Component/Intl/Resources/data/currencies/gu.json | 2 +- .../Component/Intl/Resources/data/currencies/he.json | 2 +- .../Component/Intl/Resources/data/currencies/hi.json | 2 +- .../Component/Intl/Resources/data/currencies/hr.json | 2 +- .../Component/Intl/Resources/data/currencies/hu.json | 2 +- .../Component/Intl/Resources/data/currencies/hy.json | 2 +- .../Component/Intl/Resources/data/currencies/id.json | 2 +- .../Component/Intl/Resources/data/currencies/in.json | 2 +- .../Component/Intl/Resources/data/currencies/is.json | 2 +- .../Component/Intl/Resources/data/currencies/it.json | 2 +- .../Component/Intl/Resources/data/currencies/iw.json | 2 +- .../Component/Intl/Resources/data/currencies/ja.json | 2 +- .../Component/Intl/Resources/data/currencies/ka.json | 2 +- .../Component/Intl/Resources/data/currencies/kk.json | 2 +- .../Component/Intl/Resources/data/currencies/km.json | 2 +- .../Component/Intl/Resources/data/currencies/kn.json | 2 +- .../Component/Intl/Resources/data/currencies/ko.json | 2 +- .../Component/Intl/Resources/data/currencies/ks.json | 2 +- .../Component/Intl/Resources/data/currencies/ky.json | 2 +- .../Component/Intl/Resources/data/currencies/lb.json | 2 +- .../Component/Intl/Resources/data/currencies/lo.json | 2 +- .../Component/Intl/Resources/data/currencies/lt.json | 2 +- .../Component/Intl/Resources/data/currencies/lv.json | 2 +- .../Component/Intl/Resources/data/currencies/meta.json | 8 +++++++- .../Component/Intl/Resources/data/currencies/mk.json | 2 +- .../Component/Intl/Resources/data/currencies/ml.json | 2 +- .../Component/Intl/Resources/data/currencies/mn.json | 2 +- .../Component/Intl/Resources/data/currencies/mr.json | 2 +- .../Component/Intl/Resources/data/currencies/ms.json | 2 +- .../Component/Intl/Resources/data/currencies/mt.json | 2 +- .../Component/Intl/Resources/data/currencies/my.json | 2 +- .../Component/Intl/Resources/data/currencies/nb.json | 2 +- .../Component/Intl/Resources/data/currencies/ne.json | 2 +- .../Component/Intl/Resources/data/currencies/nl.json | 4 ++-- .../Component/Intl/Resources/data/currencies/nn.json | 2 +- .../Component/Intl/Resources/data/currencies/no.json | 2 +- .../Component/Intl/Resources/data/currencies/or.json | 2 +- .../Component/Intl/Resources/data/currencies/pa.json | 2 +- .../Component/Intl/Resources/data/currencies/pl.json | 2 +- .../Component/Intl/Resources/data/currencies/ps.json | 2 +- .../Component/Intl/Resources/data/currencies/pt.json | 2 +- .../Component/Intl/Resources/data/currencies/pt_PT.json | 2 +- .../Component/Intl/Resources/data/currencies/rm.json | 2 +- .../Component/Intl/Resources/data/currencies/ro.json | 2 +- .../Component/Intl/Resources/data/currencies/root.json | 2 +- .../Component/Intl/Resources/data/currencies/ru.json | 2 +- .../Component/Intl/Resources/data/currencies/sh.json | 2 +- .../Component/Intl/Resources/data/currencies/si.json | 2 +- .../Component/Intl/Resources/data/currencies/sk.json | 2 +- .../Component/Intl/Resources/data/currencies/sl.json | 2 +- .../Component/Intl/Resources/data/currencies/sq.json | 2 +- .../Component/Intl/Resources/data/currencies/sr.json | 2 +- .../Intl/Resources/data/currencies/sr_Latn.json | 2 +- .../Component/Intl/Resources/data/currencies/sv.json | 2 +- .../Component/Intl/Resources/data/currencies/sw.json | 2 +- .../Component/Intl/Resources/data/currencies/ta.json | 2 +- .../Component/Intl/Resources/data/currencies/te.json | 2 +- .../Component/Intl/Resources/data/currencies/th.json | 2 +- .../Component/Intl/Resources/data/currencies/tl.json | 2 +- .../Component/Intl/Resources/data/currencies/tr.json | 2 +- .../Component/Intl/Resources/data/currencies/ug.json | 2 +- .../Component/Intl/Resources/data/currencies/uk.json | 2 +- .../Component/Intl/Resources/data/currencies/ur.json | 2 +- .../Component/Intl/Resources/data/currencies/uz.json | 2 +- .../Intl/Resources/data/currencies/uz_Cyrl.json | 2 +- .../Component/Intl/Resources/data/currencies/vi.json | 2 +- .../Component/Intl/Resources/data/currencies/zh.json | 2 +- .../Intl/Resources/data/currencies/zh_Hant.json | 2 +- .../Component/Intl/Resources/data/currencies/zu.json | 2 +- .../Component/Intl/Resources/data/languages/af.json | 2 +- .../Component/Intl/Resources/data/languages/am.json | 2 +- .../Component/Intl/Resources/data/languages/ar.json | 2 +- .../Component/Intl/Resources/data/languages/as.json | 2 +- .../Component/Intl/Resources/data/languages/az.json | 2 +- .../Component/Intl/Resources/data/languages/be.json | 2 +- .../Component/Intl/Resources/data/languages/bg.json | 2 +- .../Component/Intl/Resources/data/languages/bn.json | 2 +- .../Component/Intl/Resources/data/languages/br.json | 2 +- .../Component/Intl/Resources/data/languages/bs.json | 2 +- .../Component/Intl/Resources/data/languages/bs_Cyrl.json | 2 +- .../Component/Intl/Resources/data/languages/ca.json | 2 +- .../Component/Intl/Resources/data/languages/ce.json | 2 +- .../Component/Intl/Resources/data/languages/cs.json | 2 +- .../Component/Intl/Resources/data/languages/cy.json | 2 +- .../Component/Intl/Resources/data/languages/da.json | 2 +- .../Component/Intl/Resources/data/languages/de.json | 2 +- .../Component/Intl/Resources/data/languages/dz.json | 2 +- .../Component/Intl/Resources/data/languages/ee.json | 2 +- .../Component/Intl/Resources/data/languages/el.json | 2 +- .../Component/Intl/Resources/data/languages/en.json | 2 +- .../Component/Intl/Resources/data/languages/es.json | 2 +- .../Component/Intl/Resources/data/languages/es_VE.json | 2 +- .../Component/Intl/Resources/data/languages/et.json | 2 +- .../Component/Intl/Resources/data/languages/eu.json | 2 +- .../Component/Intl/Resources/data/languages/fa.json | 2 +- .../Component/Intl/Resources/data/languages/fi.json | 2 +- .../Component/Intl/Resources/data/languages/fo.json | 2 +- .../Component/Intl/Resources/data/languages/fr.json | 2 +- .../Component/Intl/Resources/data/languages/fy.json | 2 +- .../Component/Intl/Resources/data/languages/ga.json | 2 +- .../Component/Intl/Resources/data/languages/gd.json | 2 +- .../Component/Intl/Resources/data/languages/gl.json | 2 +- .../Component/Intl/Resources/data/languages/gu.json | 2 +- .../Component/Intl/Resources/data/languages/he.json | 2 +- .../Component/Intl/Resources/data/languages/hi.json | 2 +- .../Component/Intl/Resources/data/languages/hr.json | 2 +- .../Component/Intl/Resources/data/languages/hu.json | 2 +- .../Component/Intl/Resources/data/languages/hy.json | 2 +- .../Component/Intl/Resources/data/languages/id.json | 2 +- .../Component/Intl/Resources/data/languages/in.json | 2 +- .../Component/Intl/Resources/data/languages/is.json | 2 +- .../Component/Intl/Resources/data/languages/it.json | 2 +- .../Component/Intl/Resources/data/languages/iw.json | 2 +- .../Component/Intl/Resources/data/languages/ja.json | 2 +- .../Component/Intl/Resources/data/languages/ka.json | 2 +- .../Component/Intl/Resources/data/languages/kk.json | 2 +- .../Component/Intl/Resources/data/languages/km.json | 2 +- .../Component/Intl/Resources/data/languages/kn.json | 2 +- .../Component/Intl/Resources/data/languages/ko.json | 2 +- .../Component/Intl/Resources/data/languages/ks.json | 2 +- .../Component/Intl/Resources/data/languages/ky.json | 2 +- .../Component/Intl/Resources/data/languages/lb.json | 2 +- .../Component/Intl/Resources/data/languages/lo.json | 2 +- .../Component/Intl/Resources/data/languages/lt.json | 2 +- .../Component/Intl/Resources/data/languages/lv.json | 2 +- .../Component/Intl/Resources/data/languages/meta.json | 2 +- .../Component/Intl/Resources/data/languages/mk.json | 2 +- .../Component/Intl/Resources/data/languages/ml.json | 2 +- .../Component/Intl/Resources/data/languages/mn.json | 2 +- .../Component/Intl/Resources/data/languages/mr.json | 2 +- .../Component/Intl/Resources/data/languages/ms.json | 2 +- .../Component/Intl/Resources/data/languages/mt.json | 2 +- .../Component/Intl/Resources/data/languages/my.json | 2 +- .../Component/Intl/Resources/data/languages/nb.json | 2 +- .../Component/Intl/Resources/data/languages/ne.json | 2 +- .../Component/Intl/Resources/data/languages/nl.json | 2 +- .../Component/Intl/Resources/data/languages/nn.json | 2 +- .../Component/Intl/Resources/data/languages/no.json | 2 +- .../Component/Intl/Resources/data/languages/or.json | 2 +- .../Component/Intl/Resources/data/languages/pa.json | 2 +- .../Component/Intl/Resources/data/languages/pl.json | 2 +- .../Component/Intl/Resources/data/languages/ps.json | 2 +- .../Component/Intl/Resources/data/languages/pt.json | 2 +- .../Component/Intl/Resources/data/languages/pt_PT.json | 2 +- .../Component/Intl/Resources/data/languages/rm.json | 2 +- .../Component/Intl/Resources/data/languages/ro.json | 2 +- .../Component/Intl/Resources/data/languages/ru.json | 2 +- .../Component/Intl/Resources/data/languages/sh.json | 2 +- .../Component/Intl/Resources/data/languages/si.json | 2 +- .../Component/Intl/Resources/data/languages/sk.json | 2 +- .../Component/Intl/Resources/data/languages/sl.json | 2 +- .../Component/Intl/Resources/data/languages/sq.json | 2 +- .../Component/Intl/Resources/data/languages/sr.json | 2 +- .../Component/Intl/Resources/data/languages/sr_Latn.json | 2 +- .../Component/Intl/Resources/data/languages/sv.json | 2 +- .../Component/Intl/Resources/data/languages/sw.json | 2 +- .../Component/Intl/Resources/data/languages/ta.json | 2 +- .../Component/Intl/Resources/data/languages/te.json | 2 +- .../Component/Intl/Resources/data/languages/th.json | 2 +- .../Component/Intl/Resources/data/languages/tl.json | 2 +- .../Component/Intl/Resources/data/languages/tr.json | 2 +- .../Component/Intl/Resources/data/languages/ug.json | 2 +- .../Component/Intl/Resources/data/languages/uk.json | 2 +- .../Component/Intl/Resources/data/languages/ur.json | 2 +- .../Component/Intl/Resources/data/languages/uz.json | 2 +- .../Component/Intl/Resources/data/languages/uz_Cyrl.json | 2 +- .../Component/Intl/Resources/data/languages/vi.json | 2 +- .../Component/Intl/Resources/data/languages/zh.json | 2 +- .../Component/Intl/Resources/data/languages/zh_Hant.json | 2 +- .../Component/Intl/Resources/data/languages/zu.json | 2 +- .../Component/Intl/Resources/data/regions/af.json | 2 +- .../Component/Intl/Resources/data/regions/am.json | 2 +- .../Component/Intl/Resources/data/regions/ar.json | 2 +- .../Component/Intl/Resources/data/regions/as.json | 2 +- .../Component/Intl/Resources/data/regions/az.json | 2 +- .../Component/Intl/Resources/data/regions/be.json | 2 +- .../Component/Intl/Resources/data/regions/bg.json | 2 +- .../Component/Intl/Resources/data/regions/bn.json | 2 +- .../Component/Intl/Resources/data/regions/br.json | 2 +- .../Component/Intl/Resources/data/regions/bs.json | 2 +- .../Component/Intl/Resources/data/regions/bs_Cyrl.json | 2 +- .../Component/Intl/Resources/data/regions/ca.json | 2 +- .../Component/Intl/Resources/data/regions/ce.json | 2 +- .../Component/Intl/Resources/data/regions/cs.json | 2 +- .../Component/Intl/Resources/data/regions/cy.json | 2 +- .../Component/Intl/Resources/data/regions/da.json | 2 +- .../Component/Intl/Resources/data/regions/de.json | 2 +- .../Component/Intl/Resources/data/regions/dz.json | 2 +- .../Component/Intl/Resources/data/regions/ee.json | 2 +- .../Component/Intl/Resources/data/regions/el.json | 2 +- .../Component/Intl/Resources/data/regions/en.json | 2 +- .../Component/Intl/Resources/data/regions/es.json | 2 +- .../Component/Intl/Resources/data/regions/es_VE.json | 2 +- .../Component/Intl/Resources/data/regions/et.json | 2 +- .../Component/Intl/Resources/data/regions/eu.json | 2 +- .../Component/Intl/Resources/data/regions/fa.json | 2 +- .../Component/Intl/Resources/data/regions/fi.json | 2 +- .../Component/Intl/Resources/data/regions/fo.json | 2 +- .../Component/Intl/Resources/data/regions/fr.json | 2 +- .../Component/Intl/Resources/data/regions/fy.json | 2 +- .../Component/Intl/Resources/data/regions/ga.json | 2 +- .../Component/Intl/Resources/data/regions/gd.json | 2 +- .../Component/Intl/Resources/data/regions/gl.json | 2 +- .../Component/Intl/Resources/data/regions/gu.json | 2 +- .../Component/Intl/Resources/data/regions/he.json | 2 +- .../Component/Intl/Resources/data/regions/hi.json | 2 +- .../Component/Intl/Resources/data/regions/hr.json | 2 +- .../Component/Intl/Resources/data/regions/hu.json | 2 +- .../Component/Intl/Resources/data/regions/hy.json | 2 +- .../Component/Intl/Resources/data/regions/id.json | 2 +- .../Component/Intl/Resources/data/regions/in.json | 2 +- .../Component/Intl/Resources/data/regions/is.json | 2 +- .../Component/Intl/Resources/data/regions/it.json | 2 +- .../Component/Intl/Resources/data/regions/iw.json | 2 +- .../Component/Intl/Resources/data/regions/ja.json | 2 +- .../Component/Intl/Resources/data/regions/ka.json | 2 +- .../Component/Intl/Resources/data/regions/kk.json | 2 +- .../Component/Intl/Resources/data/regions/km.json | 2 +- .../Component/Intl/Resources/data/regions/kn.json | 2 +- .../Component/Intl/Resources/data/regions/ko.json | 2 +- .../Component/Intl/Resources/data/regions/ks.json | 2 +- .../Component/Intl/Resources/data/regions/ky.json | 2 +- .../Component/Intl/Resources/data/regions/lb.json | 2 +- .../Component/Intl/Resources/data/regions/lo.json | 2 +- .../Component/Intl/Resources/data/regions/lt.json | 2 +- .../Component/Intl/Resources/data/regions/lv.json | 2 +- .../Component/Intl/Resources/data/regions/meta.json | 2 +- .../Component/Intl/Resources/data/regions/mk.json | 2 +- .../Component/Intl/Resources/data/regions/ml.json | 2 +- .../Component/Intl/Resources/data/regions/mn.json | 2 +- .../Component/Intl/Resources/data/regions/mr.json | 2 +- .../Component/Intl/Resources/data/regions/ms.json | 2 +- .../Component/Intl/Resources/data/regions/mt.json | 2 +- .../Component/Intl/Resources/data/regions/my.json | 2 +- .../Component/Intl/Resources/data/regions/nb.json | 2 +- .../Component/Intl/Resources/data/regions/ne.json | 2 +- .../Component/Intl/Resources/data/regions/nl.json | 2 +- .../Component/Intl/Resources/data/regions/nn.json | 2 +- .../Component/Intl/Resources/data/regions/no.json | 2 +- .../Component/Intl/Resources/data/regions/or.json | 2 +- .../Component/Intl/Resources/data/regions/pa.json | 2 +- .../Component/Intl/Resources/data/regions/pl.json | 2 +- .../Component/Intl/Resources/data/regions/ps.json | 2 +- .../Component/Intl/Resources/data/regions/pt.json | 2 +- .../Component/Intl/Resources/data/regions/pt_PT.json | 2 +- .../Component/Intl/Resources/data/regions/rm.json | 2 +- .../Component/Intl/Resources/data/regions/ro.json | 2 +- .../Component/Intl/Resources/data/regions/ru.json | 2 +- .../Component/Intl/Resources/data/regions/sh.json | 2 +- .../Component/Intl/Resources/data/regions/si.json | 2 +- .../Component/Intl/Resources/data/regions/sk.json | 2 +- .../Component/Intl/Resources/data/regions/sl.json | 2 +- .../Component/Intl/Resources/data/regions/sq.json | 2 +- .../Component/Intl/Resources/data/regions/sr.json | 2 +- .../Component/Intl/Resources/data/regions/sr_Latn.json | 2 +- .../Component/Intl/Resources/data/regions/sv.json | 2 +- .../Component/Intl/Resources/data/regions/sw.json | 2 +- .../Component/Intl/Resources/data/regions/ta.json | 2 +- .../Component/Intl/Resources/data/regions/te.json | 2 +- .../Component/Intl/Resources/data/regions/th.json | 2 +- .../Component/Intl/Resources/data/regions/tl.json | 2 +- .../Component/Intl/Resources/data/regions/tr.json | 2 +- .../Component/Intl/Resources/data/regions/ug.json | 2 +- .../Component/Intl/Resources/data/regions/uk.json | 2 +- .../Component/Intl/Resources/data/regions/ur.json | 2 +- .../Component/Intl/Resources/data/regions/uz.json | 2 +- .../Component/Intl/Resources/data/regions/uz_Cyrl.json | 2 +- .../Component/Intl/Resources/data/regions/vi.json | 2 +- .../Component/Intl/Resources/data/regions/zh.json | 2 +- .../Component/Intl/Resources/data/regions/zh_Hant.json | 2 +- .../Component/Intl/Resources/data/regions/zu.json | 2 +- .../Component/Intl/Resources/data/scripts/af.json | 2 +- .../Component/Intl/Resources/data/scripts/am.json | 2 +- .../Component/Intl/Resources/data/scripts/ar.json | 2 +- .../Component/Intl/Resources/data/scripts/as.json | 2 +- .../Component/Intl/Resources/data/scripts/az.json | 2 +- .../Component/Intl/Resources/data/scripts/be.json | 2 +- .../Component/Intl/Resources/data/scripts/bg.json | 2 +- .../Component/Intl/Resources/data/scripts/bn.json | 2 +- .../Component/Intl/Resources/data/scripts/br.json | 2 +- .../Component/Intl/Resources/data/scripts/bs.json | 2 +- .../Component/Intl/Resources/data/scripts/bs_Cyrl.json | 2 +- .../Component/Intl/Resources/data/scripts/ca.json | 2 +- .../Component/Intl/Resources/data/scripts/ce.json | 2 +- .../Component/Intl/Resources/data/scripts/cs.json | 2 +- .../Component/Intl/Resources/data/scripts/cy.json | 2 +- .../Component/Intl/Resources/data/scripts/da.json | 2 +- .../Component/Intl/Resources/data/scripts/de.json | 2 +- .../Component/Intl/Resources/data/scripts/dz.json | 2 +- .../Component/Intl/Resources/data/scripts/ee.json | 2 +- .../Component/Intl/Resources/data/scripts/el.json | 2 +- .../Component/Intl/Resources/data/scripts/en.json | 9 ++++++++- .../Component/Intl/Resources/data/scripts/es.json | 2 +- .../Component/Intl/Resources/data/scripts/et.json | 2 +- .../Component/Intl/Resources/data/scripts/eu.json | 2 +- .../Component/Intl/Resources/data/scripts/fa.json | 2 +- .../Component/Intl/Resources/data/scripts/fi.json | 2 +- .../Component/Intl/Resources/data/scripts/fo.json | 2 +- .../Component/Intl/Resources/data/scripts/fr.json | 2 +- .../Component/Intl/Resources/data/scripts/fy.json | 2 +- .../Component/Intl/Resources/data/scripts/ga.json | 2 +- .../Component/Intl/Resources/data/scripts/gd.json | 2 +- .../Component/Intl/Resources/data/scripts/gl.json | 2 +- .../Component/Intl/Resources/data/scripts/gu.json | 2 +- .../Component/Intl/Resources/data/scripts/he.json | 2 +- .../Component/Intl/Resources/data/scripts/hi.json | 2 +- .../Component/Intl/Resources/data/scripts/hr.json | 2 +- .../Component/Intl/Resources/data/scripts/hu.json | 2 +- .../Component/Intl/Resources/data/scripts/hy.json | 2 +- .../Component/Intl/Resources/data/scripts/id.json | 2 +- .../Component/Intl/Resources/data/scripts/in.json | 2 +- .../Component/Intl/Resources/data/scripts/is.json | 2 +- .../Component/Intl/Resources/data/scripts/it.json | 2 +- .../Component/Intl/Resources/data/scripts/iw.json | 2 +- .../Component/Intl/Resources/data/scripts/ja.json | 2 +- .../Component/Intl/Resources/data/scripts/ka.json | 2 +- .../Component/Intl/Resources/data/scripts/kk.json | 2 +- .../Component/Intl/Resources/data/scripts/km.json | 2 +- .../Component/Intl/Resources/data/scripts/kn.json | 2 +- .../Component/Intl/Resources/data/scripts/ko.json | 2 +- .../Component/Intl/Resources/data/scripts/ks.json | 2 +- .../Component/Intl/Resources/data/scripts/ky.json | 2 +- .../Component/Intl/Resources/data/scripts/lb.json | 2 +- .../Component/Intl/Resources/data/scripts/lo.json | 2 +- .../Component/Intl/Resources/data/scripts/lt.json | 2 +- .../Component/Intl/Resources/data/scripts/lv.json | 2 +- .../Component/Intl/Resources/data/scripts/meta.json | 9 ++++++++- .../Component/Intl/Resources/data/scripts/mk.json | 2 +- .../Component/Intl/Resources/data/scripts/ml.json | 2 +- .../Component/Intl/Resources/data/scripts/mn.json | 2 +- .../Component/Intl/Resources/data/scripts/mr.json | 2 +- .../Component/Intl/Resources/data/scripts/ms.json | 2 +- .../Component/Intl/Resources/data/scripts/mt.json | 2 +- .../Component/Intl/Resources/data/scripts/my.json | 2 +- .../Component/Intl/Resources/data/scripts/nb.json | 2 +- .../Component/Intl/Resources/data/scripts/ne.json | 2 +- .../Component/Intl/Resources/data/scripts/nl.json | 2 +- .../Component/Intl/Resources/data/scripts/nn.json | 2 +- .../Component/Intl/Resources/data/scripts/no.json | 2 +- .../Component/Intl/Resources/data/scripts/or.json | 2 +- .../Component/Intl/Resources/data/scripts/pa.json | 2 +- .../Component/Intl/Resources/data/scripts/pl.json | 2 +- .../Component/Intl/Resources/data/scripts/ps.json | 2 +- .../Component/Intl/Resources/data/scripts/pt.json | 2 +- .../Component/Intl/Resources/data/scripts/pt_PT.json | 2 +- .../Component/Intl/Resources/data/scripts/rm.json | 2 +- .../Component/Intl/Resources/data/scripts/ro.json | 2 +- .../Component/Intl/Resources/data/scripts/ru.json | 2 +- .../Component/Intl/Resources/data/scripts/sh.json | 2 +- .../Component/Intl/Resources/data/scripts/si.json | 2 +- .../Component/Intl/Resources/data/scripts/sk.json | 2 +- .../Component/Intl/Resources/data/scripts/sl.json | 2 +- .../Component/Intl/Resources/data/scripts/sq.json | 2 +- .../Component/Intl/Resources/data/scripts/sr.json | 2 +- .../Component/Intl/Resources/data/scripts/sr_Latn.json | 2 +- .../Component/Intl/Resources/data/scripts/sv.json | 2 +- .../Component/Intl/Resources/data/scripts/sw.json | 2 +- .../Component/Intl/Resources/data/scripts/ta.json | 2 +- .../Component/Intl/Resources/data/scripts/te.json | 2 +- .../Component/Intl/Resources/data/scripts/th.json | 2 +- .../Component/Intl/Resources/data/scripts/tl.json | 2 +- .../Component/Intl/Resources/data/scripts/tr.json | 2 +- .../Component/Intl/Resources/data/scripts/ug.json | 2 +- .../Component/Intl/Resources/data/scripts/uk.json | 2 +- .../Component/Intl/Resources/data/scripts/ur.json | 2 +- .../Component/Intl/Resources/data/scripts/uz.json | 2 +- .../Component/Intl/Resources/data/scripts/uz_Cyrl.json | 2 +- .../Component/Intl/Resources/data/scripts/vi.json | 2 +- .../Component/Intl/Resources/data/scripts/zh.json | 2 +- .../Component/Intl/Resources/data/scripts/zh_Hant.json | 2 +- .../Component/Intl/Resources/data/scripts/zu.json | 2 +- src/Symfony/Component/Intl/Resources/data/svn-info.txt | 8 ++++---- src/Symfony/Component/Intl/Resources/data/version.txt | 2 +- .../Data/Provider/AbstractScriptDataProviderTest.php | 7 +++++++ 409 files changed, 439 insertions(+), 411 deletions(-) diff --git a/src/Symfony/Component/Intl/Intl.php b/src/Symfony/Component/Intl/Intl.php index c4f80ca6c18d7..b621d7e51d324 100644 --- a/src/Symfony/Component/Intl/Intl.php +++ b/src/Symfony/Component/Intl/Intl.php @@ -235,7 +235,7 @@ public static function getIcuDataVersion() */ public static function getIcuStubVersion() { - return '61.1'; + return '62.1'; } /** diff --git a/src/Symfony/Component/Intl/Resources/bin/icu.ini b/src/Symfony/Component/Intl/Resources/bin/icu.ini index ba613bb5c9884..9845e0bb1a33a 100644 --- a/src/Symfony/Component/Intl/Resources/bin/icu.ini +++ b/src/Symfony/Component/Intl/Resources/bin/icu.ini @@ -17,3 +17,4 @@ 59 = http://source.icu-project.org/repos/icu/tags/release-59-1/icu4c/source 60 = http://source.icu-project.org/repos/icu/tags/release-60-2/icu4c/source 61 = http://source.icu-project.org/repos/icu/tags/release-61-1/icu4c/source +62 = http://source.icu-project.org/repos/icu/tags/release-62-1/icu4c/source diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/af.json b/src/Symfony/Component/Intl/Resources/data/currencies/af.json index 195beed4423e6..1131e344ffb7e 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/af.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/af.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/am.json b/src/Symfony/Component/Intl/Resources/data/currencies/am.json index 9058b8c350062..023e618712c61 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/am.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/am.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ar.json b/src/Symfony/Component/Intl/Resources/data/currencies/ar.json index fb9e5f0b8c708..e61cdcc4e7bd5 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ar.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ar.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/as.json b/src/Symfony/Component/Intl/Resources/data/currencies/as.json index 3657dbd3d1a57..055e6034912ef 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/as.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/as.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/az.json b/src/Symfony/Component/Intl/Resources/data/currencies/az.json index 1b8f992166279..29f6f9bcbbbde 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/az.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/az.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/be.json b/src/Symfony/Component/Intl/Resources/data/currencies/be.json index 473fb9f1f730a..3ec0c8b471fe4 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/be.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/be.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/bg.json b/src/Symfony/Component/Intl/Resources/data/currencies/bg.json index 271539f5816b4..63064588961c1 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/bg.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/bg.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/bn.json b/src/Symfony/Component/Intl/Resources/data/currencies/bn.json index fd6efd48f21b6..7878bc5aac913 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/bn.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/bn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/br.json b/src/Symfony/Component/Intl/Resources/data/currencies/br.json index 22eea9943c716..c02a4f31cf532 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/br.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/br.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/bs.json b/src/Symfony/Component/Intl/Resources/data/currencies/bs.json index f622b92404f19..863c0ed0e2347 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/bs.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/bs.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/bs_Cyrl.json b/src/Symfony/Component/Intl/Resources/data/currencies/bs_Cyrl.json index 8ea737ab67642..22722c932d8c9 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/bs_Cyrl.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/bs_Cyrl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ca.json b/src/Symfony/Component/Intl/Resources/data/currencies/ca.json index adeffbcc735fc..b6b7d3813eb80 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ca.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ca.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ce.json b/src/Symfony/Component/Intl/Resources/data/currencies/ce.json index 15a7970ea485f..e33a78cbc3c5a 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ce.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ce.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/cs.json b/src/Symfony/Component/Intl/Resources/data/currencies/cs.json index 75336abaaea17..9ca585cd32411 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/cs.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/cs.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.15", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/cy.json b/src/Symfony/Component/Intl/Resources/data/currencies/cy.json index 427c7c4ee5368..eb06a2e1b1720 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/cy.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/cy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/da.json b/src/Symfony/Component/Intl/Resources/data/currencies/da.json index bf7efa167f098..3b4f6f96031e5 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/da.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/da.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/de.json b/src/Symfony/Component/Intl/Resources/data/currencies/de.json index 0cc2637bf5d70..a0440234d15dc 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/de.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/de.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.41", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/dz.json b/src/Symfony/Component/Intl/Resources/data/currencies/dz.json index 52065987d1995..86c079209c2a8 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/dz.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/dz.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.69", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ee.json b/src/Symfony/Component/Intl/Resources/data/currencies/ee.json index f134982957c13..367b4347af0b1 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ee.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ee.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/el.json b/src/Symfony/Component/Intl/Resources/data/currencies/el.json index 6340817056487..8dc27a15d8d8f 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/el.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/el.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/en.json b/src/Symfony/Component/Intl/Resources/data/currencies/en.json index fec62d406cfef..4d2bfd85dc6c8 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/en.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/en.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/es.json b/src/Symfony/Component/Intl/Resources/data/currencies/es.json index 0e9e40ec81d56..43960ad1bd04f 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/es.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/es.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/es_VE.json b/src/Symfony/Component/Intl/Resources/data/currencies/es_VE.json index b0186c31fb475..e147a09cf353c 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/es_VE.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/es_VE.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.39", + "Version": "2.1.41.97", "Names": { "VEF": [ "Bs.", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/et.json b/src/Symfony/Component/Intl/Resources/data/currencies/et.json index 94d63c3ea9596..e197096bc518a 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/et.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/et.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/eu.json b/src/Symfony/Component/Intl/Resources/data/currencies/eu.json index 1b5dcd9758c11..705bf9f112e7d 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/eu.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/eu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/fa.json b/src/Symfony/Component/Intl/Resources/data/currencies/fa.json index 7e7df64a18c1b..4d2d577bcdedb 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/fa.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/fa.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/fi.json b/src/Symfony/Component/Intl/Resources/data/currencies/fi.json index 19c712491d080..d7e04181393be 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/fi.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/fi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/fo.json b/src/Symfony/Component/Intl/Resources/data/currencies/fo.json index 7db1d33e3fb94..8fad41b52595d 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/fo.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/fo.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/fr.json b/src/Symfony/Component/Intl/Resources/data/currencies/fr.json index 800c9e4d89138..55fcd25248df8 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/fr.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/fr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/fy.json b/src/Symfony/Component/Intl/Resources/data/currencies/fy.json index 1c557bf851c02..0c3648228c956 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/fy.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/fy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ga.json b/src/Symfony/Component/Intl/Resources/data/currencies/ga.json index dbb83178310e4..f5220ddaaa373 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ga.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ga.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/gd.json b/src/Symfony/Component/Intl/Resources/data/currencies/gd.json index c2b173894728d..805ff5869b9f0 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/gd.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/gd.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/gl.json b/src/Symfony/Component/Intl/Resources/data/currencies/gl.json index 02b0d8b574671..f9e1e697fcc7f 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/gl.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/gl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/gu.json b/src/Symfony/Component/Intl/Resources/data/currencies/gu.json index c5d49e2779ec9..a27f1ecd0160f 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/gu.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/gu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/he.json b/src/Symfony/Component/Intl/Resources/data/currencies/he.json index 6933e0ca1bb41..7a2475cf02dba 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/he.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/he.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/hi.json b/src/Symfony/Component/Intl/Resources/data/currencies/hi.json index 4544cea5dbbaf..2159d42b461c8 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/hi.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/hi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/hr.json b/src/Symfony/Component/Intl/Resources/data/currencies/hr.json index 4e85c0f030b99..b8ba455f15d21 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/hr.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/hr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/hu.json b/src/Symfony/Component/Intl/Resources/data/currencies/hu.json index 4039c505cd1af..2406114598684 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/hu.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/hu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/hy.json b/src/Symfony/Component/Intl/Resources/data/currencies/hy.json index 73fd873c346fa..14e89809aa111 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/hy.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/hy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/id.json b/src/Symfony/Component/Intl/Resources/data/currencies/id.json index 4da93ecd05099..d18d212fcae7a 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/id.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/id.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/in.json b/src/Symfony/Component/Intl/Resources/data/currencies/in.json index 4da93ecd05099..d18d212fcae7a 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/in.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/in.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/is.json b/src/Symfony/Component/Intl/Resources/data/currencies/is.json index d854bc1070e38..3b77177230a49 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/is.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/is.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/it.json b/src/Symfony/Component/Intl/Resources/data/currencies/it.json index df98d9ebfc9da..6c4ef7a027bbf 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/it.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/it.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.40", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/iw.json b/src/Symfony/Component/Intl/Resources/data/currencies/iw.json index 6933e0ca1bb41..7a2475cf02dba 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/iw.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/iw.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ja.json b/src/Symfony/Component/Intl/Resources/data/currencies/ja.json index a388a1ac5f0a3..2fc9a53aaeb76 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ja.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ja.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ka.json b/src/Symfony/Component/Intl/Resources/data/currencies/ka.json index 3ba1942450a03..67d63d8a6c179 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ka.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ka.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/kk.json b/src/Symfony/Component/Intl/Resources/data/currencies/kk.json index 20adf173d2976..fb11ce310c798 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/kk.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/kk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/km.json b/src/Symfony/Component/Intl/Resources/data/currencies/km.json index 8b73e024f9e0b..5c41dac002fbe 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/km.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/km.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/kn.json b/src/Symfony/Component/Intl/Resources/data/currencies/kn.json index 3f23d8bb499d8..3ddd471f35a1e 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/kn.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/kn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ko.json b/src/Symfony/Component/Intl/Resources/data/currencies/ko.json index ab543f2086a0a..e3bd00c6f147f 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ko.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ko.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ks.json b/src/Symfony/Component/Intl/Resources/data/currencies/ks.json index 498b4dd1cf38e..002c2d30d3913 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ks.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ks.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ky.json b/src/Symfony/Component/Intl/Resources/data/currencies/ky.json index c3435649e999b..df62f05636490 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ky.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ky.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/lb.json b/src/Symfony/Component/Intl/Resources/data/currencies/lb.json index c427022bf56dc..a0588c4912530 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/lb.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/lb.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/lo.json b/src/Symfony/Component/Intl/Resources/data/currencies/lo.json index d852350a53017..62ca5e12c5d33 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/lo.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/lo.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/lt.json b/src/Symfony/Component/Intl/Resources/data/currencies/lt.json index 04803c2a4f9c0..53b0cdb7bdec3 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/lt.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/lt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/lv.json b/src/Symfony/Component/Intl/Resources/data/currencies/lv.json index bb9f0619bba64..e651d2e70eb08 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/lv.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/lv.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/meta.json b/src/Symfony/Component/Intl/Resources/data/currencies/meta.json index 858a528612d00..9dd1d353dfff8 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/meta.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/meta.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.58", "Currencies": [ "ADP", "AED", @@ -663,6 +663,12 @@ 0, 0 ], + "VEF": [ + 2, + 0, + 0, + 0 + ], "VND": [ 0, 0, diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/mk.json b/src/Symfony/Component/Intl/Resources/data/currencies/mk.json index 754cb8044e9b4..ca0294f0b49ed 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/mk.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/mk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ml.json b/src/Symfony/Component/Intl/Resources/data/currencies/ml.json index 588553900fc40..3b6e669cf89ce 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ml.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ml.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/mn.json b/src/Symfony/Component/Intl/Resources/data/currencies/mn.json index 3ae12501c7073..5938e605550bd 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/mn.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/mn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/mr.json b/src/Symfony/Component/Intl/Resources/data/currencies/mr.json index 00b4ab812fca2..87ea2b9ec131e 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/mr.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/mr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ms.json b/src/Symfony/Component/Intl/Resources/data/currencies/ms.json index a9dd3014dbb8a..3036c91284e42 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ms.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ms.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/mt.json b/src/Symfony/Component/Intl/Resources/data/currencies/mt.json index 64f108d883d69..0b1f0f7279b0d 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/mt.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/mt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/my.json b/src/Symfony/Component/Intl/Resources/data/currencies/my.json index a0c0926207709..9c8822111ea04 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/my.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/my.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/nb.json b/src/Symfony/Component/Intl/Resources/data/currencies/nb.json index f97f45d1c5440..f14107f891542 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/nb.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/nb.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ne.json b/src/Symfony/Component/Intl/Resources/data/currencies/ne.json index 7ae11871707e5..655169f14d9a8 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ne.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ne.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/nl.json b/src/Symfony/Component/Intl/Resources/data/currencies/nl.json index 434e711f1099d..72d4d1d47f8c8 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/nl.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/nl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", @@ -271,7 +271,7 @@ ], "CNY": [ "CN¥", - "Chinese Yuan" + "Chinese yuan" ], "COP": [ "COP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/nn.json b/src/Symfony/Component/Intl/Resources/data/currencies/nn.json index 767b7e56372eb..b2fb4fe7db080 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/nn.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/nn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/no.json b/src/Symfony/Component/Intl/Resources/data/currencies/no.json index f97f45d1c5440..f14107f891542 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/no.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/no.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/or.json b/src/Symfony/Component/Intl/Resources/data/currencies/or.json index a8efbdb951ec2..ca7c224aed043 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/or.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/or.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/pa.json b/src/Symfony/Component/Intl/Resources/data/currencies/pa.json index 78fe3f486d6f8..33d39c0bcb01f 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/pa.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/pa.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/pl.json b/src/Symfony/Component/Intl/Resources/data/currencies/pl.json index c54c5c63ec946..613ba02a0e557 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/pl.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/pl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.15", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ps.json b/src/Symfony/Component/Intl/Resources/data/currencies/ps.json index 7ba97c4bc79c7..153aff6d74dcf 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ps.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ps.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/pt.json b/src/Symfony/Component/Intl/Resources/data/currencies/pt.json index 9ead271d3fc55..1af2a051d0ec5 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/pt.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/pt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/pt_PT.json b/src/Symfony/Component/Intl/Resources/data/currencies/pt_PT.json index 2672a96a1456d..b9fe93bccc1e5 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/pt_PT.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/pt_PT.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/rm.json b/src/Symfony/Component/Intl/Resources/data/currencies/rm.json index e8545fcbe472a..66552349b6352 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/rm.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/rm.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ro.json b/src/Symfony/Component/Intl/Resources/data/currencies/ro.json index de4561f084442..87383953ec8f4 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ro.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ro.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/root.json b/src/Symfony/Component/Intl/Resources/data/currencies/root.json index 3f1917c8900ac..3b78302feba14 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/root.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/root.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.58", "Names": { "AUD": [ "A$", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ru.json b/src/Symfony/Component/Intl/Resources/data/currencies/ru.json index a2b3748ea233f..db29b840362bb 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ru.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ru.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/sh.json b/src/Symfony/Component/Intl/Resources/data/currencies/sh.json index 321a08b32373e..f1a8f9bbf9af3 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/sh.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/sh.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.37", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/si.json b/src/Symfony/Component/Intl/Resources/data/currencies/si.json index e8a6959f86a21..f39852e997be7 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/si.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/si.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/sk.json b/src/Symfony/Component/Intl/Resources/data/currencies/sk.json index ab7061b963a27..21c9f866559aa 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/sk.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/sk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/sl.json b/src/Symfony/Component/Intl/Resources/data/currencies/sl.json index 3d0d38adb0656..24430cfab9e82 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/sl.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/sl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/sq.json b/src/Symfony/Component/Intl/Resources/data/currencies/sq.json index 29fc4935f7905..6db1b1334e1f4 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/sq.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/sq.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/sr.json b/src/Symfony/Component/Intl/Resources/data/currencies/sr.json index 36ef5a780b05f..db80e6519cd61 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/sr.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/sr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/sr_Latn.json b/src/Symfony/Component/Intl/Resources/data/currencies/sr_Latn.json index 321a08b32373e..f1a8f9bbf9af3 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/sr_Latn.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/sr_Latn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.37", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/sv.json b/src/Symfony/Component/Intl/Resources/data/currencies/sv.json index 00f411f54778d..df4b40318fc8b 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/sv.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/sv.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/sw.json b/src/Symfony/Component/Intl/Resources/data/currencies/sw.json index 0fc0fd1957693..2c1de61c1937a 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/sw.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/sw.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ta.json b/src/Symfony/Component/Intl/Resources/data/currencies/ta.json index 6d8263e3424ab..3f0e7a5539817 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ta.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ta.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/te.json b/src/Symfony/Component/Intl/Resources/data/currencies/te.json index 156892f946da4..200c7659756d7 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/te.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/te.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/th.json b/src/Symfony/Component/Intl/Resources/data/currencies/th.json index 9a0f9a6a6d0fa..881492f1c27a3 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/th.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/th.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/tl.json b/src/Symfony/Component/Intl/Resources/data/currencies/tl.json index f5881a01e2c8d..7ad62a02697e4 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/tl.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/tl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/tr.json b/src/Symfony/Component/Intl/Resources/data/currencies/tr.json index fe0c247a635fc..5920329dfb3af 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/tr.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/tr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ug.json b/src/Symfony/Component/Intl/Resources/data/currencies/ug.json index af737fd2aa246..5aece0a8aa846 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ug.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ug.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/uk.json b/src/Symfony/Component/Intl/Resources/data/currencies/uk.json index 62de55e9e27f5..ec44b5009867a 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/uk.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/uk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/ur.json b/src/Symfony/Component/Intl/Resources/data/currencies/ur.json index fa41082b1ca04..e7fdca3d2b464 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/ur.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/ur.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/uz.json b/src/Symfony/Component/Intl/Resources/data/currencies/uz.json index cf9fe56d802ba..a99be4d553e75 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/uz.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/uz.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/uz_Cyrl.json b/src/Symfony/Component/Intl/Resources/data/currencies/uz_Cyrl.json index e13a40eeb89e9..9deb2b2fe2a8e 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/uz_Cyrl.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/uz_Cyrl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.69", + "Version": "2.1.41.97", "Names": { "ANG": [ "ANG", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/vi.json b/src/Symfony/Component/Intl/Resources/data/currencies/vi.json index 2693d127a4067..398f76881e8fe 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/vi.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/vi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/zh.json b/src/Symfony/Component/Intl/Resources/data/currencies/zh.json index 04379ec801608..39b62310c2dbe 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/zh.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/zh.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/zh_Hant.json b/src/Symfony/Component/Intl/Resources/data/currencies/zh_Hant.json index 2fef02124c7ea..0ac1f1a537f0b 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/zh_Hant.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/zh_Hant.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "ADP": [ "ADP", diff --git a/src/Symfony/Component/Intl/Resources/data/currencies/zu.json b/src/Symfony/Component/Intl/Resources/data/currencies/zu.json index e07dbbd3767a6..d7a7caf686983 100644 --- a/src/Symfony/Component/Intl/Resources/data/currencies/zu.json +++ b/src/Symfony/Component/Intl/Resources/data/currencies/zu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AED": [ "AED", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/af.json b/src/Symfony/Component/Intl/Resources/data/languages/af.json index ff428d44d5985..c33370a652670 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/af.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/af.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abkasies", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/am.json b/src/Symfony/Component/Intl/Resources/data/languages/am.json index a1726c4e5d8fc..c4c23c151d0c6 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/am.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/am.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "አፋርኛ", "ab": "አብሐዚኛ", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ar.json b/src/Symfony/Component/Intl/Resources/data/languages/ar.json index 7893d2204b65f..aa0c218b28875 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ar.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ar.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "الأفارية", "ab": "الأبخازية", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/as.json b/src/Symfony/Component/Intl/Resources/data/languages/as.json index 9745f49557680..275f70741815c 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/as.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/as.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "আফাৰ", "ab": "আবখাজিয়ান", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/az.json b/src/Symfony/Component/Intl/Resources/data/languages/az.json index d226a67835ceb..aee7ed4f05576 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/az.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/az.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abxaz", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/be.json b/src/Symfony/Component/Intl/Resources/data/languages/be.json index b4b379fc35ef7..580d82ed45d0f 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/be.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/be.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афарская", "ab": "абхазская", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/bg.json b/src/Symfony/Component/Intl/Resources/data/languages/bg.json index 801007fc81bbc..b918596574fbf 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/bg.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/bg.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афарски", "ab": "абхазки", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/bn.json b/src/Symfony/Component/Intl/Resources/data/languages/bn.json index 2148e59d043c1..55a56db1aeb31 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/bn.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/bn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "আফার", "ab": "আবখাজিয়ান", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/br.json b/src/Symfony/Component/Intl/Resources/data/languages/br.json index 33fadd28c92a6..39c428634d05c 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/br.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/br.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abkhazeg", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/bs.json b/src/Symfony/Component/Intl/Resources/data/languages/bs.json index 57edbe6c99cb5..4dd7e19e3ff94 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/bs.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/bs.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afarski", "ab": "abhaski", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/bs_Cyrl.json b/src/Symfony/Component/Intl/Resources/data/languages/bs_Cyrl.json index acadc23fae040..8612cb042144a 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/bs_Cyrl.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/bs_Cyrl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афарски", "ab": "абказијски", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ca.json b/src/Symfony/Component/Intl/Resources/data/languages/ca.json index 659e91126f536..5bda25ad6fb28 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ca.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ca.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "àfar", "ab": "abkhaz", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ce.json b/src/Symfony/Component/Intl/Resources/data/languages/ce.json index fa836974e27c5..0e1eec1c00eff 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ce.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ce.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афарийн", "ab": "абхазхойн", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/cs.json b/src/Symfony/Component/Intl/Resources/data/languages/cs.json index 78a8053921287..7e5e48c4884d6 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/cs.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/cs.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.15", + "Version": "2.1.41.97", "Names": { "aa": "afarština", "ab": "abcházština", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/cy.json b/src/Symfony/Component/Intl/Resources/data/languages/cy.json index ac9186dd10a1e..0cd62e8301642 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/cy.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/cy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Affareg", "ab": "Abchaseg", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/da.json b/src/Symfony/Component/Intl/Resources/data/languages/da.json index 712f8d9ea9761..c48507fa96fe4 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/da.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/da.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abkhasisk", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/de.json b/src/Symfony/Component/Intl/Resources/data/languages/de.json index 7105b07435540..e226ecd5dd363 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/de.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/de.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.41", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abchasisch", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/dz.json b/src/Symfony/Component/Intl/Resources/data/languages/dz.json index d3e9af9252400..99064b1b69c71 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/dz.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/dz.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.69", + "Version": "2.1.41.97", "Names": { "aa": "ཨ་ཕར་ཁ", "ab": "ཨཱབ་ཁ་ཟི་ཡ་ཁ", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ee.json b/src/Symfony/Component/Intl/Resources/data/languages/ee.json index 02ae68425ac55..c86ed87834f8a 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ee.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ee.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "ab": "abkhaziagbe", "af": "afrikaangbe", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/el.json b/src/Symfony/Component/Intl/Resources/data/languages/el.json index ed4ff61b6ad0d..50ec641b64472 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/el.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/el.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "Αφάρ", "ab": "Αμπχαζικά", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/en.json b/src/Symfony/Component/Intl/Resources/data/languages/en.json index b2c53f95f0099..596b52cbd3473 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/en.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/en.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abkhazian", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/es.json b/src/Symfony/Component/Intl/Resources/data/languages/es.json index a85beff7bfd86..51c61b6c14b24 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/es.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/es.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abjasio", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/es_VE.json b/src/Symfony/Component/Intl/Resources/data/languages/es_VE.json index 46ba3c939bd07..d1cecf3592ff4 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/es_VE.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/es_VE.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.39", + "Version": "2.1.41.97", "Names": { "ace": "acehnés", "arp": "arapaho", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/et.json b/src/Symfony/Component/Intl/Resources/data/languages/et.json index e4878042dc918..5cbddcc43ed57 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/et.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/et.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afari", "ab": "abhaasi", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/eu.json b/src/Symfony/Component/Intl/Resources/data/languages/eu.json index 6bb031663af82..c5e2adaf694ec 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/eu.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/eu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afarera", "ab": "abkhaziera", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/fa.json b/src/Symfony/Component/Intl/Resources/data/languages/fa.json index 1386cbf2057b1..d19fb09a45813 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/fa.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/fa.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "آفاری", "ab": "آبخازی", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/fi.json b/src/Symfony/Component/Intl/Resources/data/languages/fi.json index 92c76d383e07f..decaff2fd2ace 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/fi.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/fi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abhaasi", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/fo.json b/src/Symfony/Component/Intl/Resources/data/languages/fo.json index 6233854155b63..2e4e561b5ac67 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/fo.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/fo.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abkhasiskt", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/fr.json b/src/Symfony/Component/Intl/Resources/data/languages/fr.json index 6dad4dee7c09a..174ed51770a0a 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/fr.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/fr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abkhaze", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/fy.json b/src/Symfony/Component/Intl/Resources/data/languages/fy.json index 7e03caf51457b..5f561e410e20d 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/fy.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/fy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abchazysk", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ga.json b/src/Symfony/Component/Intl/Resources/data/languages/ga.json index 94f03252e7786..6de0c3082ca56 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ga.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ga.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Afáiris", "ab": "Abcáisis", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/gd.json b/src/Symfony/Component/Intl/Resources/data/languages/gd.json index e77e30b6cbf69..c38995e302df2 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/gd.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/gd.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abchasais", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/gl.json b/src/Symfony/Component/Intl/Resources/data/languages/gl.json index db5daf4d0b487..ae35f802af045 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/gl.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/gl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abkhazo", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/gu.json b/src/Symfony/Component/Intl/Resources/data/languages/gu.json index ad2701714e69a..41e06526a36e8 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/gu.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/gu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "અફાર", "ab": "અબખાજિયન", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/he.json b/src/Symfony/Component/Intl/Resources/data/languages/he.json index 04cc4c84cb3ec..c09e9012ba0e6 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/he.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/he.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "אפארית", "ab": "אבחזית", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/hi.json b/src/Symfony/Component/Intl/Resources/data/languages/hi.json index 515338e21869d..fb840c01e3e48 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/hi.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/hi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "अफ़ार", "ab": "अब्ख़ाज़ियन", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/hr.json b/src/Symfony/Component/Intl/Resources/data/languages/hr.json index 29539ba1824ca..2a9d518bb5987 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/hr.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/hr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afarski", "ab": "abhaski", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/hu.json b/src/Symfony/Component/Intl/Resources/data/languages/hu.json index 3b8010f6d8318..f988b6db2a309 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/hu.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/hu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abház", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/hy.json b/src/Symfony/Component/Intl/Resources/data/languages/hy.json index 4cf3f7127a594..0d10b798ae051 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/hy.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/hy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "աֆարերեն", "ab": "աբխազերեն", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/id.json b/src/Symfony/Component/Intl/Resources/data/languages/id.json index e50e515ab23f6..7e5a6d6e027f8 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/id.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/id.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abkhaz", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/in.json b/src/Symfony/Component/Intl/Resources/data/languages/in.json index e50e515ab23f6..7e5a6d6e027f8 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/in.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/in.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abkhaz", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/is.json b/src/Symfony/Component/Intl/Resources/data/languages/is.json index 050b4f8a1d64d..3380c99e2c535 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/is.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/is.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afár", "ab": "abkasíska", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/it.json b/src/Symfony/Component/Intl/Resources/data/languages/it.json index d1ca80bee9a18..23631e1b7bb15 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/it.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/it.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.40", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abcaso", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/iw.json b/src/Symfony/Component/Intl/Resources/data/languages/iw.json index 04cc4c84cb3ec..c09e9012ba0e6 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/iw.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/iw.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "אפארית", "ab": "אבחזית", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ja.json b/src/Symfony/Component/Intl/Resources/data/languages/ja.json index 847ea3d037d8a..b9563b04be11f 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ja.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ja.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "アファル語", "ab": "アブハズ語", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ka.json b/src/Symfony/Component/Intl/Resources/data/languages/ka.json index 4d86d0d61cfb3..7f316a6c4a099 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ka.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ka.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "აფარი", "ab": "აფხაზური", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/kk.json b/src/Symfony/Component/Intl/Resources/data/languages/kk.json index cfc94c0671048..d7734f1d8801e 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/kk.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/kk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афар тілі", "ab": "абхаз тілі", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/km.json b/src/Symfony/Component/Intl/Resources/data/languages/km.json index 5d3a8f5889407..db01ecfaf208e 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/km.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/km.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "អាហ្វារ", "ab": "អាប់ខាហ៊្សាន", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/kn.json b/src/Symfony/Component/Intl/Resources/data/languages/kn.json index 620f471c4916f..b3b358898bf29 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/kn.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/kn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "ಅಫಾರ್", "ab": "ಅಬ್ಖಾಜಿಯನ್", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ko.json b/src/Symfony/Component/Intl/Resources/data/languages/ko.json index 5d669f96d0d2e..7534f313b8c11 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ko.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ko.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "아파르어", "ab": "압카즈어", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ks.json b/src/Symfony/Component/Intl/Resources/data/languages/ks.json index 0946840f012ad..76ae0a0f9cce6 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ks.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ks.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "اَفار", "ab": "اَبخازِیان", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ky.json b/src/Symfony/Component/Intl/Resources/data/languages/ky.json index 7694f60e094fd..429e9bde6e935 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ky.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ky.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афарча", "ab": "абхазча", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/lb.json b/src/Symfony/Component/Intl/Resources/data/languages/lb.json index 9bdc36212f0e1..c64f92b1a073d 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/lb.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/lb.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abchasesch", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/lo.json b/src/Symfony/Component/Intl/Resources/data/languages/lo.json index 132a421fc5b98..2b84dccb71d2b 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/lo.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/lo.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "ອະຟາ", "ab": "ແອບຄາຊຽນ", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/lt.json b/src/Symfony/Component/Intl/Resources/data/languages/lt.json index 8fa93ba498fd5..708997ccee018 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/lt.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/lt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afarų", "ab": "abchazų", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/lv.json b/src/Symfony/Component/Intl/Resources/data/languages/lv.json index 2ab15373a2583..e1d309fa1903b 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/lv.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/lv.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afāru", "ab": "abhāzu", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/meta.json b/src/Symfony/Component/Intl/Resources/data/languages/meta.json index 0dfe57fd6be22..db24a0f675645 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/meta.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/meta.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.58", "Languages": [ "aa", "ab", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/mk.json b/src/Symfony/Component/Intl/Resources/data/languages/mk.json index 5bd7db58709d3..fbc7c30c386e5 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/mk.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/mk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афарски", "ab": "апхаски", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ml.json b/src/Symfony/Component/Intl/Resources/data/languages/ml.json index eadd084be9348..ad2ab3ea9437d 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ml.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ml.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "അഫാർ", "ab": "അബ്‌ഖാസിയൻ", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/mn.json b/src/Symfony/Component/Intl/Resources/data/languages/mn.json index cd1240747d375..d1d9ff69db00e 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/mn.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/mn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афар", "ab": "абхаз", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/mr.json b/src/Symfony/Component/Intl/Resources/data/languages/mr.json index 10e0209306859..0d258d5098320 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/mr.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/mr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "अफार", "ab": "अबखेजियन", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ms.json b/src/Symfony/Component/Intl/Resources/data/languages/ms.json index 5449f09742e34..c4aab246c9a68 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ms.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ms.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abkhazia", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/mt.json b/src/Symfony/Component/Intl/Resources/data/languages/mt.json index 44562555857c3..2072eba467ecc 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/mt.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/mt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abkażjan", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/my.json b/src/Symfony/Component/Intl/Resources/data/languages/my.json index 77101f6ca21c1..2ec10914b5677 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/my.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/my.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "အာဖာ", "ab": "အဘ်ခါဇီရာ", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/nb.json b/src/Symfony/Component/Intl/Resources/data/languages/nb.json index 88940b15d6468..532ba060df714 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/nb.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/nb.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abkhasisk", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ne.json b/src/Symfony/Component/Intl/Resources/data/languages/ne.json index f1fed6bf6a008..01b8072739e64 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ne.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ne.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "अफार", "ab": "अब्खाजियाली", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/nl.json b/src/Symfony/Component/Intl/Resources/data/languages/nl.json index ec05edacb6b1f..961a1b5b185e2 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/nl.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/nl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abchazisch", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/nn.json b/src/Symfony/Component/Intl/Resources/data/languages/nn.json index 1935b6ba292a4..43db86fb181f2 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/nn.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/nn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abkhasisk", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/no.json b/src/Symfony/Component/Intl/Resources/data/languages/no.json index 88940b15d6468..532ba060df714 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/no.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/no.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abkhasisk", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/or.json b/src/Symfony/Component/Intl/Resources/data/languages/or.json index 010dc7ece7310..c59f26147ba3a 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/or.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/or.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "ଅଫାର୍", "ab": "ଆବ୍ଖାଜିଆନ୍", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/pa.json b/src/Symfony/Component/Intl/Resources/data/languages/pa.json index 026c7f1018f9e..633834d93be04 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/pa.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/pa.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "ਅਫ਼ਾਰ", "ab": "ਅਬਖਾਜ਼ੀਅਨ", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/pl.json b/src/Symfony/Component/Intl/Resources/data/languages/pl.json index 88750fb79628d..13d114b92d43d 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/pl.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/pl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.15", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abchaski", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ps.json b/src/Symfony/Component/Intl/Resources/data/languages/ps.json index ae2473da778f1..c85eebb6c8af1 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ps.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ps.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "افري", "ab": "ابخازي", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/pt.json b/src/Symfony/Component/Intl/Resources/data/languages/pt.json index 349a5036b298e..9c946026febf6 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/pt.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/pt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abcázio", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/pt_PT.json b/src/Symfony/Component/Intl/Resources/data/languages/pt_PT.json index 73437eb95f0cb..25c4663b2c7a7 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/pt_PT.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/pt_PT.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "af": "africanês", "ang": "inglês antigo", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/rm.json b/src/Symfony/Component/Intl/Resources/data/languages/rm.json index 8fb029c0add76..3db839d3c63fa 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/rm.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/rm.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abchasian", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ro.json b/src/Symfony/Component/Intl/Resources/data/languages/ro.json index 1f5d01dfe285d..f44554a2022e5 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ro.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ro.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abhază", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ru.json b/src/Symfony/Component/Intl/Resources/data/languages/ru.json index 8925868d0d0bf..8361b8a53e7e7 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ru.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ru.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "афарский", "ab": "абхазский", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/sh.json b/src/Symfony/Component/Intl/Resources/data/languages/sh.json index 550fd7a28071b..0207d42669f64 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/sh.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/sh.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.37", + "Version": "2.1.41.97", "Names": { "aa": "afarski", "ab": "abhaski", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/si.json b/src/Symfony/Component/Intl/Resources/data/languages/si.json index 55452edfe4e8c..8886ec01c100e 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/si.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/si.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "අෆාර්", "ab": "ඇබ්කාසියානු", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/sk.json b/src/Symfony/Component/Intl/Resources/data/languages/sk.json index eac02f59857f7..309516348e4d5 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/sk.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/sk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afarčina", "ab": "abcházčina", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/sl.json b/src/Symfony/Component/Intl/Resources/data/languages/sl.json index 4a4c320aa806d..7a20c2d1569be 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/sl.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/sl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afarščina", "ab": "abhaščina", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/sq.json b/src/Symfony/Component/Intl/Resources/data/languages/sq.json index 49cdabfe7e184..f59a6d2c31295 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/sq.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/sq.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afarisht", "ab": "abkazisht", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/sr.json b/src/Symfony/Component/Intl/Resources/data/languages/sr.json index f71e9eb42f3b6..68bd971a8c2e8 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/sr.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/sr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "афарски", "ab": "абхаски", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/sr_Latn.json b/src/Symfony/Component/Intl/Resources/data/languages/sr_Latn.json index 550fd7a28071b..0207d42669f64 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/sr_Latn.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/sr_Latn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.37", + "Version": "2.1.41.97", "Names": { "aa": "afarski", "ab": "abhaski", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/sv.json b/src/Symfony/Component/Intl/Resources/data/languages/sv.json index a70f7dd9e63ae..3182aa19ae27a 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/sv.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/sv.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abchaziska", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/sw.json b/src/Symfony/Component/Intl/Resources/data/languages/sw.json index 5ca303c5d7f58..da50b43e93e33 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/sw.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/sw.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Kiafar", "ab": "Kiabkhazi", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ta.json b/src/Symfony/Component/Intl/Resources/data/languages/ta.json index 2fa91ee1061c0..fbad1dc9ad806 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ta.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ta.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "அஃபார்", "ab": "அப்காஜியான்", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/te.json b/src/Symfony/Component/Intl/Resources/data/languages/te.json index deb01580bd80e..0c9aa4a04843e 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/te.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/te.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "అఫార్", "ab": "అబ్ఖాజియన్", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/th.json b/src/Symfony/Component/Intl/Resources/data/languages/th.json index b6975b84724be..a4cc9b59586e4 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/th.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/th.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "อะฟาร์", "ab": "อับฮาเซีย", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/tl.json b/src/Symfony/Component/Intl/Resources/data/languages/tl.json index b42541207d16f..e81d9a7a6f0ba 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/tl.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/tl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abkhazian", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/tr.json b/src/Symfony/Component/Intl/Resources/data/languages/tr.json index 8962eac5947d5..5ed8aa1cc15af 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/tr.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/tr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "Afar", "ab": "Abhazca", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ug.json b/src/Symfony/Component/Intl/Resources/data/languages/ug.json index de0f5c582b976..33f941b962943 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ug.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ug.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "ئافارچە", "ab": "ئابخازچە", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/uk.json b/src/Symfony/Component/Intl/Resources/data/languages/uk.json index 57a44efaa7efe..9d76f9f4f9e06 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/uk.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/uk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "афарська", "ab": "абхазька", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/ur.json b/src/Symfony/Component/Intl/Resources/data/languages/ur.json index b41f6b510f4ce..20cc35032e85e 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/ur.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/ur.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "افار", "ab": "ابقازیان", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/uz.json b/src/Symfony/Component/Intl/Resources/data/languages/uz.json index e7024c28bde3a..7133307bbff2c 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/uz.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/uz.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "afar", "ab": "abxaz", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/uz_Cyrl.json b/src/Symfony/Component/Intl/Resources/data/languages/uz_Cyrl.json index 42e9d729b5565..cffed94258c4b 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/uz_Cyrl.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/uz_Cyrl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.69", + "Version": "2.1.41.97", "Names": { "aa": "афарча", "ab": "абхазча", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/vi.json b/src/Symfony/Component/Intl/Resources/data/languages/vi.json index 4523ebba98b5a..4a4b649898d60 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/vi.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/vi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "Tiếng Afar", "ab": "Tiếng Abkhazia", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/zh.json b/src/Symfony/Component/Intl/Resources/data/languages/zh.json index a4fdf9b84dd84..e9a4724e0a6d5 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/zh.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/zh.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "阿法尔语", "ab": "阿布哈西亚语", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/zh_Hant.json b/src/Symfony/Component/Intl/Resources/data/languages/zh_Hant.json index b10c40624a6af..1b6c35ddffdb3 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/zh_Hant.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/zh_Hant.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "aa": "阿法文", "ab": "阿布哈茲文", diff --git a/src/Symfony/Component/Intl/Resources/data/languages/zu.json b/src/Symfony/Component/Intl/Resources/data/languages/zu.json index a10d135133362..e536c98d3462f 100644 --- a/src/Symfony/Component/Intl/Resources/data/languages/zu.json +++ b/src/Symfony/Component/Intl/Resources/data/languages/zu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "aa": "isi-Afar", "ab": "isi-Abkhazian", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/af.json b/src/Symfony/Component/Intl/Resources/data/regions/af.json index 1c9d008592ee2..2b280fd249db1 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/af.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/af.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascensioneiland", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/am.json b/src/Symfony/Component/Intl/Resources/data/regions/am.json index eacb4cad2b7d0..0936881e34dd1 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/am.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/am.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "አሴንሽን ደሴት", "AD": "አንዶራ", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ar.json b/src/Symfony/Component/Intl/Resources/data/regions/ar.json index 00a3034237098..93ce837ca1ecd 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ar.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ar.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "جزيرة أسينشيون", "AD": "أندورا", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/as.json b/src/Symfony/Component/Intl/Resources/data/regions/as.json index 7a8dca9572a23..50baeecf10cc0 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/as.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/as.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "এচেনচিয়ন দ্বীপ", "AD": "আন্দোৰা", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/az.json b/src/Symfony/Component/Intl/Resources/data/regions/az.json index cbbac809fdd5e..2bc9b27e4b692 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/az.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/az.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Askenson adası", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/be.json b/src/Symfony/Component/Intl/Resources/data/regions/be.json index ca044fa291599..916a0653e726f 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/be.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/be.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Востраў Узнясення", "AD": "Андора", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/bg.json b/src/Symfony/Component/Intl/Resources/data/regions/bg.json index 1a1a657bf5642..0a4de0c69eb56 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/bg.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/bg.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "остров Възнесение", "AD": "Андора", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/bn.json b/src/Symfony/Component/Intl/Resources/data/regions/bn.json index 2421034c6f596..35626e5519c09 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/bn.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/bn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "অ্যাসসেনশন আইল্যান্ড", "AD": "আন্ডোরা", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/br.json b/src/Symfony/Component/Intl/Resources/data/regions/br.json index 8bebb1ca0c51a..5f1bdd18120d2 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/br.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/br.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Enez Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/bs.json b/src/Symfony/Component/Intl/Resources/data/regions/bs.json index a73a81e738515..a923f5fd90c29 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/bs.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/bs.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ostrvo Ascension", "AD": "Andora", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/bs_Cyrl.json b/src/Symfony/Component/Intl/Resources/data/regions/bs_Cyrl.json index 39413c42b856e..76c673b03b2ae 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/bs_Cyrl.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/bs_Cyrl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Острво Асенсион", "AD": "Андора", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ca.json b/src/Symfony/Component/Intl/Resources/data/regions/ca.json index c6c6fcd042854..50a0177b4d7d2 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ca.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ca.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Illa de l’Ascensió", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ce.json b/src/Symfony/Component/Intl/Resources/data/regions/ce.json index 86aa0341ab433..934580a09914e 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ce.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ce.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Айъадаларан гӀайре", "AD": "Андорра", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/cs.json b/src/Symfony/Component/Intl/Resources/data/regions/cs.json index 9d6899289ceee..68eea5b4ac7b9 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/cs.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/cs.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.15", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/cy.json b/src/Symfony/Component/Intl/Resources/data/regions/cy.json index b707a2dd7143f..caa829ed16014 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/cy.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/cy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ynys Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/da.json b/src/Symfony/Component/Intl/Resources/data/regions/da.json index 7994d129c6334..ef8b2658a839a 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/da.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/da.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ascensionøen", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/de.json b/src/Symfony/Component/Intl/Resources/data/regions/de.json index c13a9edb986d1..b521ae4bc511e 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/de.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/de.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.41", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/dz.json b/src/Symfony/Component/Intl/Resources/data/regions/dz.json index e2e292ad0bc21..9d20f23af3cf3 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/dz.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/dz.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.69", + "Version": "2.1.41.97", "Names": { "AC": "ཨེ་སེན་ཤུན་ཚོ་གླིང༌", "AD": "ཨཱན་དོ་ར", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ee.json b/src/Symfony/Component/Intl/Resources/data/regions/ee.json index 53cef01b73e07..5b1f0fd5ab031 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ee.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ee.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension ƒudomekpo nutome", "AD": "Andorra nutome", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/el.json b/src/Symfony/Component/Intl/Resources/data/regions/el.json index a470d7b6ebeb7..447264e8c6ebc 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/el.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/el.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Νήσος Ασενσιόν", "AD": "Ανδόρα", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/en.json b/src/Symfony/Component/Intl/Resources/data/regions/en.json index c8f3cb77d6aef..74663075241bc 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/en.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/en.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.97", "Names": { "AC": "Ascension Island", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/es.json b/src/Symfony/Component/Intl/Resources/data/regions/es.json index 083058458e3ac..3369ed0e0b945 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/es.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/es.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Isla de la Ascensión", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/es_VE.json b/src/Symfony/Component/Intl/Resources/data/regions/es_VE.json index 7685c507e39a4..e1b997480707f 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/es_VE.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/es_VE.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.39", + "Version": "2.1.41.97", "Names": { "BA": "Bosnia y Herzegovina", "TA": "Tristán de Acuña", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/et.json b/src/Symfony/Component/Intl/Resources/data/regions/et.json index 154c8ff11a5cf..e22adf5ffddb6 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/et.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/et.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascensioni saar", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/eu.json b/src/Symfony/Component/Intl/Resources/data/regions/eu.json index a345bca3a249a..9df3ed11c06c5 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/eu.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/eu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension uhartea", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/fa.json b/src/Symfony/Component/Intl/Resources/data/regions/fa.json index 3c020d7857dd1..fb2ac4af4cc69 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/fa.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/fa.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "جزایر آسنسیون", "AD": "آندورا", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/fi.json b/src/Symfony/Component/Intl/Resources/data/regions/fi.json index e8971298fdeb6..4ba9dcd1e77a3 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/fi.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/fi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ascension-saari", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/fo.json b/src/Symfony/Component/Intl/Resources/data/regions/fo.json index e90c49b51210c..8459fc4314f81 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/fo.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/fo.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/fr.json b/src/Symfony/Component/Intl/Resources/data/regions/fr.json index 352312636665a..17184b5d4f503 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/fr.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/fr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Île de l’Ascension", "AD": "Andorre", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/fy.json b/src/Symfony/Component/Intl/Resources/data/regions/fy.json index bf816d5542776..e307781e9f8dc 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/fy.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/fy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ga.json b/src/Symfony/Component/Intl/Resources/data/regions/ga.json index 502e88e65f9cb..ba938a53c13d6 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ga.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ga.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Oileán na Deascabhála", "AD": "Andóra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/gd.json b/src/Symfony/Component/Intl/Resources/data/regions/gd.json index 7c42b18affe39..6844ad29d3c84 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/gd.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/gd.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Eilean na Deasgabhalach", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/gl.json b/src/Symfony/Component/Intl/Resources/data/regions/gl.json index f2c95c3ec25ae..e6f23e88f5bed 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/gl.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/gl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Illa de Ascensión", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/gu.json b/src/Symfony/Component/Intl/Resources/data/regions/gu.json index a588299ce9772..d3e310380bcd4 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/gu.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/gu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "એસેન્શન આઇલેન્ડ", "AD": "ઍંડોરા", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/he.json b/src/Symfony/Component/Intl/Resources/data/regions/he.json index cf28a392f2cf0..ce12c7030efa7 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/he.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/he.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "האי אסנשן", "AD": "אנדורה", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/hi.json b/src/Symfony/Component/Intl/Resources/data/regions/hi.json index d21917284cdec..3cb506ce25115 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/hi.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/hi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "असेंशन द्वीप", "AD": "एंडोरा", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/hr.json b/src/Symfony/Component/Intl/Resources/data/regions/hr.json index d95a4b9dd8301..b086e081de377 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/hr.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/hr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Otok Ascension", "AD": "Andora", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/hu.json b/src/Symfony/Component/Intl/Resources/data/regions/hu.json index 64fd49c62639f..badd300ee33e6 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/hu.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/hu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ascension-sziget", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/hy.json b/src/Symfony/Component/Intl/Resources/data/regions/hy.json index e24bc7e9dc446..08be7f38349f0 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/hy.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/hy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Համբարձման կղզի", "AD": "Անդորրա", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/id.json b/src/Symfony/Component/Intl/Resources/data/regions/id.json index 35ce14d8b9e74..552825ccdffd1 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/id.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/id.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Pulau Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/in.json b/src/Symfony/Component/Intl/Resources/data/regions/in.json index 35ce14d8b9e74..552825ccdffd1 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/in.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/in.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Pulau Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/is.json b/src/Symfony/Component/Intl/Resources/data/regions/is.json index 2e58c99e291ef..db171546d2bff 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/is.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/is.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension-eyja", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/it.json b/src/Symfony/Component/Intl/Resources/data/regions/it.json index fe6e7438d6245..865a31a6accbd 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/it.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/it.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.40", + "Version": "2.1.41.97", "Names": { "AC": "Isola Ascensione", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/iw.json b/src/Symfony/Component/Intl/Resources/data/regions/iw.json index cf28a392f2cf0..ce12c7030efa7 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/iw.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/iw.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "האי אסנשן", "AD": "אנדורה", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ja.json b/src/Symfony/Component/Intl/Resources/data/regions/ja.json index a5ccf21526ed5..511a6bde6573f 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ja.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ja.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "アセンション島", "AD": "アンドラ", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ka.json b/src/Symfony/Component/Intl/Resources/data/regions/ka.json index 059c01949e569..861ca2ea951ac 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ka.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ka.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "ამაღლების კუნძული", "AD": "ანდორა", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/kk.json b/src/Symfony/Component/Intl/Resources/data/regions/kk.json index 8cd36f18ca83d..0c6e912947b2e 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/kk.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/kk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Әскенжін аралы", "AD": "Андорра", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/km.json b/src/Symfony/Component/Intl/Resources/data/regions/km.json index 05c5092091519..50d149e55e0dc 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/km.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/km.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "កោះ​អាសេនសិន", "AD": "អង់ដូរ៉ា", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/kn.json b/src/Symfony/Component/Intl/Resources/data/regions/kn.json index 548183e2ff7ee..0265e4f39be72 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/kn.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/kn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "ಅಸೆನ್ಶನ್ ದ್ವೀಪ", "AD": "ಅಂಡೋರಾ", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ko.json b/src/Symfony/Component/Intl/Resources/data/regions/ko.json index 1fb1a39b0b31f..e33d48d1b9deb 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ko.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ko.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "어센션 섬", "AD": "안도라", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ks.json b/src/Symfony/Component/Intl/Resources/data/regions/ks.json index 6c0da75828d99..a956c7a3b79e7 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ks.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ks.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AD": "اٮ۪نڑورا", "AE": "مُتحدہ عرَب امارات", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ky.json b/src/Symfony/Component/Intl/Resources/data/regions/ky.json index 33ae2611291e2..e3acf4db41793 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ky.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ky.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Вознесение аралы", "AD": "Андорра", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/lb.json b/src/Symfony/Component/Intl/Resources/data/regions/lb.json index 0245d11143561..612f2e856b1bc 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/lb.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/lb.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/lo.json b/src/Symfony/Component/Intl/Resources/data/regions/lo.json index 7756792ab9f81..8de0bb9006954 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/lo.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/lo.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "ເກາະອາເຊນຊັນ", "AD": "ອັນດໍຣາ", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/lt.json b/src/Symfony/Component/Intl/Resources/data/regions/lt.json index 59370d64af771..d3d868d21ec1c 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/lt.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/lt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Dangun Žengimo sala", "AD": "Andora", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/lv.json b/src/Symfony/Component/Intl/Resources/data/regions/lv.json index df0e0c598b373..a5d6739a27730 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/lv.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/lv.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Debesbraukšanas sala", "AD": "Andora", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/meta.json b/src/Symfony/Component/Intl/Resources/data/regions/meta.json index 578d7f6734895..9dbe566037405 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/meta.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/meta.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.58", "Regions": [ "AC", "AD", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/mk.json b/src/Symfony/Component/Intl/Resources/data/regions/mk.json index b03d2f47c21ca..d03ade1157a73 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/mk.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/mk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Остров Асенсион", "AD": "Андора", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ml.json b/src/Symfony/Component/Intl/Resources/data/regions/ml.json index 79fc31e42cb1f..54e7f6568d3a4 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ml.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ml.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "അസൻഷൻ ദ്വീപ്", "AD": "അൻഡോറ", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/mn.json b/src/Symfony/Component/Intl/Resources/data/regions/mn.json index f92b045b0c784..f32d2000b4a11 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/mn.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/mn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Асенсион арал", "AD": "Андорра", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/mr.json b/src/Symfony/Component/Intl/Resources/data/regions/mr.json index a957a87625cf5..f80e64ff770d3 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/mr.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/mr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "अ‍ॅसेन्शियन बेट", "AD": "अँडोरा", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ms.json b/src/Symfony/Component/Intl/Resources/data/regions/ms.json index 3d33e9a15c6e7..a5b9fae212e0f 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ms.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ms.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Pulau Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/mt.json b/src/Symfony/Component/Intl/Resources/data/regions/mt.json index f9fae72c2d575..43e92dba5f961 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/mt.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/mt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension Island", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/my.json b/src/Symfony/Component/Intl/Resources/data/regions/my.json index 85d06b918aeda..73946f0ac61fa 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/my.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/my.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "အဆန်းရှင်းကျွန်း", "AD": "အန်ဒိုရာ", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/nb.json b/src/Symfony/Component/Intl/Resources/data/regions/nb.json index 4964dded5ac09..ad15e817644d3 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/nb.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/nb.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ne.json b/src/Symfony/Component/Intl/Resources/data/regions/ne.json index a07e675da7693..a72f1fdccf6ea 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ne.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ne.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "एस्केन्सन टापु", "AD": "अन्डोर्रा", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/nl.json b/src/Symfony/Component/Intl/Resources/data/regions/nl.json index e5546b299c379..a57efb1b355b2 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/nl.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/nl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/nn.json b/src/Symfony/Component/Intl/Resources/data/regions/nn.json index 86dd61e79a253..60e95611cf146 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/nn.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/nn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/no.json b/src/Symfony/Component/Intl/Resources/data/regions/no.json index 4964dded5ac09..ad15e817644d3 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/no.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/no.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/or.json b/src/Symfony/Component/Intl/Resources/data/regions/or.json index 21fa28f03aa99..c7d9d4c46118a 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/or.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/or.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "ଆସେନସିଅନ୍‌ ଦ୍ୱୀପ", "AD": "ଆଣ୍ଡୋରା", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/pa.json b/src/Symfony/Component/Intl/Resources/data/regions/pa.json index a9d8a7e678f27..206bf55846097 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/pa.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/pa.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "ਅਸੈਂਸ਼ਨ ਟਾਪੂ", "AD": "ਅੰਡੋਰਾ", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/pl.json b/src/Symfony/Component/Intl/Resources/data/regions/pl.json index 26905881d6bbc..9abb131f316fd 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/pl.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/pl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.15", + "Version": "2.1.41.97", "Names": { "AC": "Wyspa Wniebowstąpienia", "AD": "Andora", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ps.json b/src/Symfony/Component/Intl/Resources/data/regions/ps.json index cdca91ad7bacf..03675445edcd4 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ps.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ps.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "د توغندیو ټاپو", "AD": "اندورا", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/pt.json b/src/Symfony/Component/Intl/Resources/data/regions/pt.json index a6981a0078a37..6bf9bf4269523 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/pt.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/pt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ilha de Ascensão", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/pt_PT.json b/src/Symfony/Component/Intl/Resources/data/regions/pt_PT.json index b0223880bbc33..38c9ce880b379 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/pt_PT.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/pt_PT.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AI": "Anguila", "AM": "Arménia", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/rm.json b/src/Symfony/Component/Intl/Resources/data/regions/rm.json index 54d63c4554e30..7313a024c93c2 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/rm.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/rm.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AD": "Andorra", "AE": "Emirats Arabs Unids", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ro.json b/src/Symfony/Component/Intl/Resources/data/regions/ro.json index eed24364b6b3d..76157267588b0 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ro.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ro.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Insula Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ru.json b/src/Symfony/Component/Intl/Resources/data/regions/ru.json index f54e92257c105..3b172ca715175 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ru.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ru.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "о-в Вознесения", "AD": "Андорра", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/sh.json b/src/Symfony/Component/Intl/Resources/data/regions/sh.json index 39cb5e416c26c..e8b664995118a 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/sh.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/sh.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.37", + "Version": "2.1.41.97", "Names": { "AC": "Ostrvo Asension", "AD": "Andora", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/si.json b/src/Symfony/Component/Intl/Resources/data/regions/si.json index bf5c723f46dce..9975aeec7d45f 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/si.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/si.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "ඇසෙන්ෂන් දිවයින", "AD": "ඇන්ඩෝරාව", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/sk.json b/src/Symfony/Component/Intl/Resources/data/regions/sk.json index 86a8c5ad1a08f..0bba0649a8f31 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/sk.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/sk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/sl.json b/src/Symfony/Component/Intl/Resources/data/regions/sl.json index d77fbb0f87428..c84a219667d13 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/sl.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/sl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Otok Ascension", "AD": "Andora", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/sq.json b/src/Symfony/Component/Intl/Resources/data/regions/sq.json index 7b6bd3e95a3fb..af82944add734 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/sq.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/sq.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Ishulli Asenshion", "AD": "Andorrë", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/sr.json b/src/Symfony/Component/Intl/Resources/data/regions/sr.json index 26232a598cb38..125467cbb16d4 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/sr.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/sr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Острво Асенсион", "AD": "Андора", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/sr_Latn.json b/src/Symfony/Component/Intl/Resources/data/regions/sr_Latn.json index 39cb5e416c26c..e8b664995118a 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/sr_Latn.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/sr_Latn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.37", + "Version": "2.1.41.97", "Names": { "AC": "Ostrvo Asension", "AD": "Andora", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/sv.json b/src/Symfony/Component/Intl/Resources/data/regions/sv.json index af919a86b366e..5801373a61caa 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/sv.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/sv.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/sw.json b/src/Symfony/Component/Intl/Resources/data/regions/sw.json index 78eebdaa8979d..2cb97478b9b35 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/sw.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/sw.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Kisiwa cha Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ta.json b/src/Symfony/Component/Intl/Resources/data/regions/ta.json index 440df72d4f18f..0cc6b2e94f282 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ta.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ta.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "அஷன்ஷியன் தீவு", "AD": "அன்டோரா", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/te.json b/src/Symfony/Component/Intl/Resources/data/regions/te.json index 25dd319333cc2..e845e339bfb40 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/te.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/te.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "అసెన్షన్ దీవి", "AD": "ఆండోరా", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/th.json b/src/Symfony/Component/Intl/Resources/data/regions/th.json index 8230d31f7e084..3317bbc7543e0 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/th.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/th.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "เกาะแอสเซนชัน", "AD": "อันดอร์รา", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/tl.json b/src/Symfony/Component/Intl/Resources/data/regions/tl.json index 23e34fc5f91b3..19554b3f88089 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/tl.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/tl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Acsencion island", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/tr.json b/src/Symfony/Component/Intl/Resources/data/regions/tr.json index 79d8c1aec0a6e..6e12bc5f1f1be 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/tr.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/tr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Ascension Adası", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ug.json b/src/Symfony/Component/Intl/Resources/data/regions/ug.json index f338015e9fc3e..0a878d99d3f91 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ug.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ug.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "ئاسسېنسىيون ئارىلى", "AD": "ئاندوررا", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/uk.json b/src/Symfony/Component/Intl/Resources/data/regions/uk.json index a47cb392c1e3a..5ddda82648360 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/uk.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/uk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Острів Вознесіння", "AD": "Андорра", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/ur.json b/src/Symfony/Component/Intl/Resources/data/regions/ur.json index c23df5b5407cc..f315ffdedf7bf 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/ur.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/ur.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "اسینشن آئلینڈ", "AD": "انڈورا", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/uz.json b/src/Symfony/Component/Intl/Resources/data/regions/uz.json index a93829d4ef9d3..ab2ddfc66edff 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/uz.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/uz.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "Me’roj oroli", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/uz_Cyrl.json b/src/Symfony/Component/Intl/Resources/data/regions/uz_Cyrl.json index 57020b5386d28..1612ed7a620ba 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/uz_Cyrl.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/uz_Cyrl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.69", + "Version": "2.1.41.97", "Names": { "AC": "Меърож ороли", "AD": "Андорра", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/vi.json b/src/Symfony/Component/Intl/Resources/data/regions/vi.json index f49cb2b04f86e..4d286235a8b53 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/vi.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/vi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "Đảo Ascension", "AD": "Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/zh.json b/src/Symfony/Component/Intl/Resources/data/regions/zh.json index 4ecff448955ef..4fc172b7647ad 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/zh.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/zh.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "阿森松岛", "AD": "安道尔", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/zh_Hant.json b/src/Symfony/Component/Intl/Resources/data/regions/zh_Hant.json index f7cefb9282ab2..1b7ef475ad1e1 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/zh_Hant.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/zh_Hant.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "AC": "阿森松島", "AD": "安道爾", diff --git a/src/Symfony/Component/Intl/Resources/data/regions/zu.json b/src/Symfony/Component/Intl/Resources/data/regions/zu.json index bfc219a289604..e92b1858c0684 100644 --- a/src/Symfony/Component/Intl/Resources/data/regions/zu.json +++ b/src/Symfony/Component/Intl/Resources/data/regions/zu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "AC": "i-Ascension Island", "AD": "i-Andorra", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/af.json b/src/Symfony/Component/Intl/Resources/data/scripts/af.json index a673f0160c35c..7b7ad30ae02f6 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/af.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/af.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Arabies", "Armn": "Armeens", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/am.json b/src/Symfony/Component/Intl/Resources/data/scripts/am.json index 78cb36500b713..946002b557603 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/am.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/am.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "ዓረብኛ", "Armn": "አርሜንያዊ", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ar.json b/src/Symfony/Component/Intl/Resources/data/scripts/ar.json index d15ce22650fd5..db49535778fbe 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ar.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ar.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "العربية", "Armn": "الأرمينية", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/as.json b/src/Symfony/Component/Intl/Resources/data/scripts/as.json index d7fadb3be12c9..66d86a27f0388 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/as.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/as.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "আৰবী", "Armn": "আৰ্মেনীয়", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/az.json b/src/Symfony/Component/Intl/Resources/data/scripts/az.json index e2a08bc031f77..a325bf271b5bc 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/az.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/az.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "ərəb", "Armi": "armi", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/be.json b/src/Symfony/Component/Intl/Resources/data/scripts/be.json index d56aae85d5bb2..c7d354a9d95ad 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/be.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/be.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "арабскае", "Armn": "армянскае", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/bg.json b/src/Symfony/Component/Intl/Resources/data/scripts/bg.json index e410e101e2ffe..4baea18813dc0 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/bg.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/bg.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "арабска", "Armi": "Арамейска", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/bn.json b/src/Symfony/Component/Intl/Resources/data/scripts/bn.json index 49f615d202024..449e8f786a74a 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/bn.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/bn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "আরবি", "Armi": "আরমি", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/br.json b/src/Symfony/Component/Intl/Resources/data/scripts/br.json index e1eedf62bd2bb..5a16c72c49b5a 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/br.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/br.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Adlm": "adlam", "Arab": "arabek", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/bs.json b/src/Symfony/Component/Intl/Resources/data/scripts/bs.json index 4dc0e7471f36d..5bc9873b0d326 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/bs.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/bs.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arapsko pismo", "Armi": "imperijsko aramejsko pismo", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/bs_Cyrl.json b/src/Symfony/Component/Intl/Resources/data/scripts/bs_Cyrl.json index d9d4f6ad85866..7a68e412072ec 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/bs_Cyrl.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/bs_Cyrl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "арапско писмо", "Armi": "империјско арамејско писмо", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ca.json b/src/Symfony/Component/Intl/Resources/data/scripts/ca.json index 9cf70f5b954cf..71486f5d807bf 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ca.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ca.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Adlm": "adlam", "Afak": "afaka", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ce.json b/src/Symfony/Component/Intl/Resources/data/scripts/ce.json index 5bfa9ed8f99b5..54da177256b8d 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ce.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ce.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Ӏаьрбийн", "Armn": "эрмалойн", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/cs.json b/src/Symfony/Component/Intl/Resources/data/scripts/cs.json index 39e01b99a6bca..34c858cb3c78b 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/cs.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/cs.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.15", + "Version": "2.1.41.97", "Names": { "Afak": "afaka", "Aghb": "kavkazskoalbánské", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/cy.json b/src/Symfony/Component/Intl/Resources/data/scripts/cy.json index 4cad1142b15bc..5e735387a9c8e 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/cy.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/cy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Arabaidd", "Armn": "Armenaidd", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/da.json b/src/Symfony/Component/Intl/Resources/data/scripts/da.json index 846ecc4306702..729eabf1712f0 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/da.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/da.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "afaka", "Arab": "arabisk", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/de.json b/src/Symfony/Component/Intl/Resources/data/scripts/de.json index 02fc8a225e35e..d570f5809cd3b 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/de.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/de.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.41", + "Version": "2.1.41.97", "Names": { "Afak": "Afaka", "Aghb": "Kaukasisch-Albanisch", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/dz.json b/src/Symfony/Component/Intl/Resources/data/scripts/dz.json index 9501061a66830..899a48ac97047 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/dz.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/dz.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.69", + "Version": "2.1.41.97", "Names": { "Arab": "ཨེ་ར་བིཀ་ཡིག་གུ", "Armn": "ཨར་མི་ནི་ཡཱན་ཡིག་གུ", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ee.json b/src/Symfony/Component/Intl/Resources/data/scripts/ee.json index 81cb17c9cbf72..702e84891d54a 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ee.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ee.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Arabiagbeŋɔŋlɔ", "Armn": "armeniagbeŋɔŋlɔ", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/el.json b/src/Symfony/Component/Intl/Resources/data/scripts/el.json index 7032aad04104e..49d9c01dc7e85 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/el.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/el.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "Αραβικό", "Armi": "Αυτοκρατορικό Αραμαϊκό", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/en.json b/src/Symfony/Component/Intl/Resources/data/scripts/en.json index 935fb4ee47f93..67a721b53b579 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/en.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/en.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.97", "Names": { "Adlm": "Adlam", "Afak": "Afaka", @@ -32,6 +32,7 @@ "Cyrl": "Cyrillic", "Cyrs": "Old Church Slavonic Cyrillic", "Deva": "Devanagari", + "Dogr": "Dogra", "Dsrt": "Deseret", "Dupl": "Duployan shorthand", "Egyd": "Egyptian demotic", @@ -42,6 +43,7 @@ "Geok": "Georgian Khutsuri", "Geor": "Georgian", "Glag": "Glagolitic", + "Gong": "Gunjala Gondi", "Gonm": "Masaram Gondi", "Goth": "Gothic", "Gran": "Grantha", @@ -90,10 +92,12 @@ "Lyci": "Lycian", "Lydi": "Lydian", "Mahj": "Mahajani", + "Maka": "Makasar", "Mand": "Mandaean", "Mani": "Manichaean", "Marc": "Marchen", "Maya": "Mayan hieroglyphs", + "Medf": "Medefaidrin", "Mend": "Mende", "Merc": "Meroitic Cursive", "Mero": "Meroitic", @@ -128,6 +132,7 @@ "Plrd": "Pollard Phonetic", "Prti": "Inscriptional Parthian", "Rjng": "Rejang", + "Rohg": "Hanifi Rohingya", "Roro": "Rongorongo", "Runr": "Runic", "Samr": "Samaritan", @@ -140,6 +145,8 @@ "Sidd": "Siddham", "Sind": "Khudawadi", "Sinh": "Sinhala", + "Sogd": "Sogdian", + "Sogo": "Old Sogdian", "Sora": "Sora Sompeng", "Soyo": "Soyombo", "Sund": "Sundanese", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/es.json b/src/Symfony/Component/Intl/Resources/data/scripts/es.json index b174d99fc27c4..c2df3f675c4d9 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/es.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/es.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "árabe", "Armn": "armenio", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/et.json b/src/Symfony/Component/Intl/Resources/data/scripts/et.json index 6b40dff5e7a6a..99821fd0b0105 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/et.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/et.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Afak": "afaka", "Aghb": "albaani", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/eu.json b/src/Symfony/Component/Intl/Resources/data/scripts/eu.json index 76eaac574f01a..eba453815a3af 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/eu.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/eu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arabiarra", "Armn": "armeniarra", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/fa.json b/src/Symfony/Component/Intl/Resources/data/scripts/fa.json index 97768fa3793a2..0fb434616c2ec 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/fa.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/fa.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Aghb": "آلبانیایی قفقازی", "Arab": "عربی", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/fi.json b/src/Symfony/Component/Intl/Resources/data/scripts/fi.json index d196ed733f059..92eeab3c701f6 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/fi.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/fi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Adlm": "fulanin adlam-aakkosto", "Afak": "afaka", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/fo.json b/src/Symfony/Component/Intl/Resources/data/scripts/fo.json index fc3da37eb38cc..3e0ed3b472e39 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/fo.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/fo.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arabisk", "Armn": "armenskt", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/fr.json b/src/Symfony/Component/Intl/Resources/data/scripts/fr.json index a85ad1f164923..e2cf1410304b5 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/fr.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/fr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "arabe", "Armi": "araméen impérial", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/fy.json b/src/Symfony/Component/Intl/Resources/data/scripts/fy.json index 4d6ef0634107e..0429b1fcef6ef 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/fy.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/fy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Afak": "Defaka", "Arab": "Arabysk", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ga.json b/src/Symfony/Component/Intl/Resources/data/scripts/ga.json index 68a488b4120a5..8db2c5db56aa1 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ga.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ga.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Adlm": "Adlm", "Aghb": "Albánach Cugasach", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/gd.json b/src/Symfony/Component/Intl/Resources/data/scripts/gd.json index ce25947cd18b8..8d4787f2b3487 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/gd.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/gd.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Adlm": "Adlam", "Afak": "Afaka", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/gl.json b/src/Symfony/Component/Intl/Resources/data/scripts/gl.json index d4cdb034238ec..ba1d4d283876e 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/gl.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/gl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "árabe", "Armn": "armenio", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/gu.json b/src/Symfony/Component/Intl/Resources/data/scripts/gu.json index fe525ef5beb54..c04979ec85c0e 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/gu.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/gu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "અરબી", "Armi": "ઇમ્પિરિયલ આર્મનિક", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/he.json b/src/Symfony/Component/Intl/Resources/data/scripts/he.json index 2212d2185750a..f4bb3eb0bf5b4 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/he.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/he.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "ערבי", "Armn": "ארמני", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/hi.json b/src/Symfony/Component/Intl/Resources/data/scripts/hi.json index 93485a5b03e23..f83c33c0e3b0e 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/hi.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/hi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "अरबी", "Armi": "इम्पिरियल आर्मेनिक", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/hr.json b/src/Symfony/Component/Intl/Resources/data/scripts/hr.json index 106b2ec0d02f7..28c0b7def324d 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/hr.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/hr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Afak": "afaka pismo", "Arab": "arapsko pismo", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/hu.json b/src/Symfony/Component/Intl/Resources/data/scripts/hu.json index d616bbb947bea..05eb86e6a5db0 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/hu.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/hu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "Arab", "Armi": "Birodalmi arámi", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/hy.json b/src/Symfony/Component/Intl/Resources/data/scripts/hy.json index f91541fae62df..eb432d3c371b6 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/hy.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/hy.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "արաբական", "Armn": "հայկական", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/id.json b/src/Symfony/Component/Intl/Resources/data/scripts/id.json index 96dba5177ecdb..39971eb283197 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/id.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/id.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "Afaka", "Aghb": "Albania Kaukasia", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/in.json b/src/Symfony/Component/Intl/Resources/data/scripts/in.json index 96dba5177ecdb..39971eb283197 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/in.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/in.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "Afaka", "Aghb": "Albania Kaukasia", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/is.json b/src/Symfony/Component/Intl/Resources/data/scripts/is.json index 5c9454756311c..230fe07b73144 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/is.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/is.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arabískt", "Armn": "armenskt", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/it.json b/src/Symfony/Component/Intl/Resources/data/scripts/it.json index 5c970930e949f..98e954ce5c803 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/it.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/it.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.40", + "Version": "2.1.41.97", "Names": { "Afak": "afaka", "Arab": "arabo", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/iw.json b/src/Symfony/Component/Intl/Resources/data/scripts/iw.json index 2212d2185750a..f4bb3eb0bf5b4 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/iw.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/iw.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "ערבי", "Armn": "ארמני", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ja.json b/src/Symfony/Component/Intl/Resources/data/scripts/ja.json index 41a3733e5a2d6..bc1e2bdfe98c0 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ja.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ja.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "アファカ文字", "Aghb": "カフカス・アルバニア文字", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ka.json b/src/Symfony/Component/Intl/Resources/data/scripts/ka.json index d809825d6daac..0b1027bc961c1 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ka.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ka.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Afak": "აფაკა", "Arab": "არაბული", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/kk.json b/src/Symfony/Component/Intl/Resources/data/scripts/kk.json index 72f4d79401a87..1733e1955d573 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/kk.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/kk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "араб жазуы", "Armn": "армян жазуы", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/km.json b/src/Symfony/Component/Intl/Resources/data/scripts/km.json index e4de4708ab4c0..9643b8da75654 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/km.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/km.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "អារ៉ាប់", "Armn": "អាមេនី", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/kn.json b/src/Symfony/Component/Intl/Resources/data/scripts/kn.json index bc78a971d10ea..d628d3cd4f3f0 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/kn.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/kn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "ಅರೇಬಿಕ್", "Armi": "ಇಂಪೀರಿಯಲ್ ಅರೆಮಾಯಿಕ್", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ko.json b/src/Symfony/Component/Intl/Resources/data/scripts/ko.json index 8bf9bd250ee46..c0b2a6205be12 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ko.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ko.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "아파카 문자", "Aghb": "코카시안 알바니아 문자", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ks.json b/src/Symfony/Component/Intl/Resources/data/scripts/ks.json index d3f02258ae97e..a31bc49c62b91 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ks.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ks.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "اَربی", "Armn": "اَرمانیَن", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ky.json b/src/Symfony/Component/Intl/Resources/data/scripts/ky.json index 68374dfba2514..ed00ab3ab5660 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ky.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ky.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Араб", "Armn": "Армян", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/lb.json b/src/Symfony/Component/Intl/Resources/data/scripts/lb.json index 6d0f4d64dd50f..ebdadefca4123 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/lb.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/lb.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Arabesch", "Armi": "Armi", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/lo.json b/src/Symfony/Component/Intl/Resources/data/scripts/lo.json index b66769a4aac2e..1549922d770e8 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/lo.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/lo.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Afak": "ອັບຟາກາ", "Arab": "ອາຣາບິກ", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/lt.json b/src/Symfony/Component/Intl/Resources/data/scripts/lt.json index 112f36454736e..f4aadcbb8db5c 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/lt.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/lt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Afak": "Afaka", "Aghb": "Kaukazo Albanijos", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/lv.json b/src/Symfony/Component/Intl/Resources/data/scripts/lv.json index e2e29b670e3d1..f1bb8124e7046 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/lv.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/lv.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arābu", "Armi": "aramiešu", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/meta.json b/src/Symfony/Component/Intl/Resources/data/scripts/meta.json index 5bbb30ab41dfd..4277f1d757a48 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/meta.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/meta.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.27", + "Version": "2.1.41.58", "Scripts": [ "Adlm", "Afak", @@ -32,6 +32,7 @@ "Cyrl", "Cyrs", "Deva", + "Dogr", "Dsrt", "Dupl", "Egyd", @@ -42,6 +43,7 @@ "Geok", "Geor", "Glag", + "Gong", "Gonm", "Goth", "Gran", @@ -90,10 +92,12 @@ "Lyci", "Lydi", "Mahj", + "Maka", "Mand", "Mani", "Marc", "Maya", + "Medf", "Mend", "Merc", "Mero", @@ -176,6 +180,7 @@ "Qabw", "Qabx", "Rjng", + "Rohg", "Roro", "Runr", "Samr", @@ -188,6 +193,8 @@ "Sidd", "Sind", "Sinh", + "Sogd", + "Sogo", "Sora", "Soyo", "Sund", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/mk.json b/src/Symfony/Component/Intl/Resources/data/scripts/mk.json index ba20168c933d6..5c37b83461f2f 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/mk.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/mk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Afak": "афака", "Aghb": "кавкаскоалбански", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ml.json b/src/Symfony/Component/Intl/Resources/data/scripts/ml.json index 62f7b84589bc1..874451321ebc1 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ml.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ml.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "അറബിക്", "Armi": "അർമി", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/mn.json b/src/Symfony/Component/Intl/Resources/data/scripts/mn.json index 8bd5d2457f7e7..3a36cb5339b44 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/mn.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/mn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "араб", "Armn": "армени", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/mr.json b/src/Symfony/Component/Intl/Resources/data/scripts/mr.json index 93b36d661d9aa..135c8c0b0b049 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/mr.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/mr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "अरबी", "Armi": "इम्पिरियल आर्मेनिक", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ms.json b/src/Symfony/Component/Intl/Resources/data/scripts/ms.json index 891d11f469c21..712583e37d0ca 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ms.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ms.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "Arab", "Armn": "Armenia", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/mt.json b/src/Symfony/Component/Intl/Resources/data/scripts/mt.json index e2d54fd0d6e57..3bfbef99aa61c 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/mt.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/mt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Għarbi", "Cyrl": "Ċirilliku", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/my.json b/src/Symfony/Component/Intl/Resources/data/scripts/my.json index b22d405907562..ad99adae3c5e6 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/my.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/my.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "အာရေဗျ", "Armn": "အာမေးနီးယား", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/nb.json b/src/Symfony/Component/Intl/Resources/data/scripts/nb.json index a7a60c33f9eb2..454abf6369ca9 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/nb.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/nb.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "afaka", "Aghb": "kaukasus-albansk", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ne.json b/src/Symfony/Component/Intl/Resources/data/scripts/ne.json index 00f5e56a4f88a..b0ca07ac07281 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ne.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ne.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "अरबी", "Armi": "आर्मी", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/nl.json b/src/Symfony/Component/Intl/Resources/data/scripts/nl.json index 4d46cb07ccd2c..36a5f4195ec60 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/nl.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/nl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Adlm": "Adlam", "Afak": "Defaka", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/nn.json b/src/Symfony/Component/Intl/Resources/data/scripts/nn.json index 38211d5070009..4e981b02e1e54 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/nn.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/nn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arabisk", "Armi": "armisk", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/no.json b/src/Symfony/Component/Intl/Resources/data/scripts/no.json index a7a60c33f9eb2..454abf6369ca9 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/no.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/no.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "afaka", "Aghb": "kaukasus-albansk", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/or.json b/src/Symfony/Component/Intl/Resources/data/scripts/or.json index aa1310fc515df..79172c5caf822 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/or.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/or.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "ଆରବିକ୍", "Armi": "ଇମ୍ପେରିଆଲ୍ ଆରମିକ୍", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/pa.json b/src/Symfony/Component/Intl/Resources/data/scripts/pa.json index 1f09e491bce80..824d3ee0c0966 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/pa.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/pa.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "ਅਰਬੀ", "Armn": "ਅਰਮੀਨੀਆਈ", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/pl.json b/src/Symfony/Component/Intl/Resources/data/scripts/pl.json index e797e10c46b64..22a8f7da2c149 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/pl.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/pl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.15", + "Version": "2.1.41.97", "Names": { "Arab": "arabskie", "Armi": "armi", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ps.json b/src/Symfony/Component/Intl/Resources/data/scripts/ps.json index 9f5422c641039..1d74d2c0a9e80 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ps.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ps.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "عربي", "Armn": "ارمانیایي", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/pt.json b/src/Symfony/Component/Intl/Resources/data/scripts/pt.json index 293a97d400014..7c42cbfdef085 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/pt.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/pt.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "árabe", "Armi": "armi", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/pt_PT.json b/src/Symfony/Component/Intl/Resources/data/scripts/pt_PT.json index 3977c81c8514f..dc0aa374d277b 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/pt_PT.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/pt_PT.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Armn": "arménio", "Egyd": "egípcio demótico", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/rm.json b/src/Symfony/Component/Intl/Resources/data/scripts/rm.json index eab31114c06ba..9cd85cd473a20 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/rm.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/rm.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arab", "Armi": "arameic imperial", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ro.json b/src/Symfony/Component/Intl/Resources/data/scripts/ro.json index 2f5125b8490f0..105230762be1d 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ro.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ro.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Arab": "arabă", "Armn": "armeană", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ru.json b/src/Symfony/Component/Intl/Resources/data/scripts/ru.json index 5ce2b43614dfc..0a7fca3b09479 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ru.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ru.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "афака", "Arab": "арабица", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/sh.json b/src/Symfony/Component/Intl/Resources/data/scripts/sh.json index 7b87fb0405050..b2a6fbf8cd130 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/sh.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/sh.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.37", + "Version": "2.1.41.97", "Names": { "Arab": "arapsko pismo", "Armi": "imperijsko aramejsko pismo", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/si.json b/src/Symfony/Component/Intl/Resources/data/scripts/si.json index 91d3a1b1cc309..6680d11d3d5f6 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/si.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/si.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "අරාබි", "Armn": "ආර්මේනියානු", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/sk.json b/src/Symfony/Component/Intl/Resources/data/scripts/sk.json index ac6143c5b7ae2..515a456c942a5 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/sk.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/sk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arabské", "Armn": "arménske", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/sl.json b/src/Symfony/Component/Intl/Resources/data/scripts/sl.json index 1840e397ecf77..42b1afd3b49a9 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/sl.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/sl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arabski", "Armi": "imperialno-aramejski", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/sq.json b/src/Symfony/Component/Intl/Resources/data/scripts/sq.json index 0fa699b70e454..a0c3b88946a26 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/sq.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/sq.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arabik", "Armn": "armen", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/sr.json b/src/Symfony/Component/Intl/Resources/data/scripts/sr.json index 072b2fa1079eb..105850f441be5 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/sr.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/sr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "арапско писмо", "Armi": "империјско арамејско писмо", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/sr_Latn.json b/src/Symfony/Component/Intl/Resources/data/scripts/sr_Latn.json index 7b87fb0405050..b2a6fbf8cd130 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/sr_Latn.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/sr_Latn.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.37", + "Version": "2.1.41.97", "Names": { "Arab": "arapsko pismo", "Armi": "imperijsko aramejsko pismo", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/sv.json b/src/Symfony/Component/Intl/Resources/data/scripts/sv.json index 80a0c8b13bbfb..69c849ec22e9f 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/sv.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/sv.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Adlm": "adlamiska", "Afak": "afakiska", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/sw.json b/src/Symfony/Component/Intl/Resources/data/scripts/sw.json index 557aba70f24be..1b6fd1f11abd1 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/sw.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/sw.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Kiarabu", "Armn": "Kiarmenia", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ta.json b/src/Symfony/Component/Intl/Resources/data/scripts/ta.json index 1707d6ccaa719..ede80b87bc071 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ta.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ta.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "அரபிக்", "Armi": "இம்பேரியல் அரமெய்க்", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/te.json b/src/Symfony/Component/Intl/Resources/data/scripts/te.json index 1da8028bc8d01..a85acff075970 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/te.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/te.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "అరబిక్", "Armi": "ఇంపీరియల్ అరామాక్", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/th.json b/src/Symfony/Component/Intl/Resources/data/scripts/th.json index 7197f26d2244d..bd9c90e489bc7 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/th.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/th.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "อะฟาคา", "Aghb": "แอลเบเนีย คอเคเซีย", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/tl.json b/src/Symfony/Component/Intl/Resources/data/scripts/tl.json index 618cc33b9601a..03fd8a38ee155 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/tl.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/tl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "Arabic", "Armn": "Armenian", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/tr.json b/src/Symfony/Component/Intl/Resources/data/scripts/tr.json index ab1df5e86c5fd..0c45b1d918dce 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/tr.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/tr.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "Afaka", "Aghb": "Kafkas Albanyası", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ug.json b/src/Symfony/Component/Intl/Resources/data/scripts/ug.json index 4a061d621e69b..90c49e07ba2a3 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ug.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ug.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Afak": "ئافاكا", "Arab": "ئەرەب", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/uk.json b/src/Symfony/Component/Intl/Resources/data/scripts/uk.json index e04a68f5d309f..7514cdeb12050 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/uk.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/uk.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Adlm": "адлам", "Afak": "афака", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/ur.json b/src/Symfony/Component/Intl/Resources/data/scripts/ur.json index c529c1c7ecada..d53d434d514b4 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/ur.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/ur.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "عربی", "Armn": "آرمینیائی", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/uz.json b/src/Symfony/Component/Intl/Resources/data/scripts/uz.json index 08f95d04e5749..e9a691078f96f 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/uz.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/uz.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "arab", "Armn": "arman", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/uz_Cyrl.json b/src/Symfony/Component/Intl/Resources/data/scripts/uz_Cyrl.json index c532c52387e68..fab5f4ecd19a6 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/uz_Cyrl.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/uz_Cyrl.json @@ -1,5 +1,5 @@ { - "Version": "2.1.38.69", + "Version": "2.1.41.97", "Names": { "Arab": "Араб", "Armn": "Арман", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/vi.json b/src/Symfony/Component/Intl/Resources/data/scripts/vi.json index 344b1e4331ea3..846c3f222e9a7 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/vi.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/vi.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Afak": "Chữ Afaka", "Arab": "Chữ Ả Rập", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/zh.json b/src/Symfony/Component/Intl/Resources/data/scripts/zh.json index 56c180d82b38d..3b281a1ae629c 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/zh.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/zh.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Adlm": "阿德拉姆文", "Afak": "阿法卡文", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/zh_Hant.json b/src/Symfony/Component/Intl/Resources/data/scripts/zh_Hant.json index ae409e05bfb9d..073e3c4fb139a 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/zh_Hant.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/zh_Hant.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.20", + "Version": "2.1.41.97", "Names": { "Adlm": "富拉文", "Afak": "阿法卡文字", diff --git a/src/Symfony/Component/Intl/Resources/data/scripts/zu.json b/src/Symfony/Component/Intl/Resources/data/scripts/zu.json index 30ece0ab8ec05..44491ae6e12b0 100644 --- a/src/Symfony/Component/Intl/Resources/data/scripts/zu.json +++ b/src/Symfony/Component/Intl/Resources/data/scripts/zu.json @@ -1,5 +1,5 @@ { - "Version": "2.1.39.11", + "Version": "2.1.41.97", "Names": { "Arab": "isi-Arabic", "Armn": "isi-Armenian", diff --git a/src/Symfony/Component/Intl/Resources/data/svn-info.txt b/src/Symfony/Component/Intl/Resources/data/svn-info.txt index 0064d80facaa8..556c6cf358825 100644 --- a/src/Symfony/Component/Intl/Resources/data/svn-info.txt +++ b/src/Symfony/Component/Intl/Resources/data/svn-info.txt @@ -1,7 +1,7 @@ SVN information =============== -URL: http://source.icu-project.org/repos/icu/tags/release-61-1/icu4c/source -Revision: 41146 -Author: heninger -Date: 2018-03-23T22:14:04.032868Z +URL: http://source.icu-project.org/repos/icu/tags/release-62-1/icu4c/source +Revision: 41542 +Author: yoshito +Date: 2018-06-20T05:34:56.496986Z diff --git a/src/Symfony/Component/Intl/Resources/data/version.txt b/src/Symfony/Component/Intl/Resources/data/version.txt index 721381cdd70ea..7425208f378b7 100644 --- a/src/Symfony/Component/Intl/Resources/data/version.txt +++ b/src/Symfony/Component/Intl/Resources/data/version.txt @@ -1 +1 @@ -61.1 +62.1 diff --git a/src/Symfony/Component/Intl/Tests/Data/Provider/AbstractScriptDataProviderTest.php b/src/Symfony/Component/Intl/Tests/Data/Provider/AbstractScriptDataProviderTest.php index b4bde80e68208..cbd3b037d2ba3 100644 --- a/src/Symfony/Component/Intl/Tests/Data/Provider/AbstractScriptDataProviderTest.php +++ b/src/Symfony/Component/Intl/Tests/Data/Provider/AbstractScriptDataProviderTest.php @@ -55,6 +55,7 @@ abstract class AbstractScriptDataProviderTest extends AbstractDataProviderTest 'Cyrl', 'Cyrs', 'Deva', + 'Dogr', 'Dsrt', 'Dupl', 'Egyd', @@ -65,6 +66,7 @@ abstract class AbstractScriptDataProviderTest extends AbstractDataProviderTest 'Geok', 'Geor', 'Glag', + 'Gong', 'Gonm', 'Goth', 'Gran', @@ -113,10 +115,12 @@ abstract class AbstractScriptDataProviderTest extends AbstractDataProviderTest 'Lyci', 'Lydi', 'Mahj', + 'Maka', 'Mand', 'Mani', 'Marc', 'Maya', + 'Medf', 'Mend', 'Merc', 'Mero', @@ -199,6 +203,7 @@ abstract class AbstractScriptDataProviderTest extends AbstractDataProviderTest 'Qabw', 'Qabx', 'Rjng', + 'Rohg', 'Roro', 'Runr', 'Samr', @@ -211,6 +216,8 @@ abstract class AbstractScriptDataProviderTest extends AbstractDataProviderTest 'Sidd', 'Sind', 'Sinh', + 'Sogd', + 'Sogo', 'Sora', 'Soyo', 'Sund', From 41f8494722b98d51a92f7c1516ed16fa0c93503b Mon Sep 17 00:00:00 2001 From: Roland Franssen Date: Fri, 22 Jun 2018 11:28:46 +0200 Subject: [PATCH 095/108] [DI] Avoid leaking unused env placeholders --- .../Compiler/ValidateEnvPlaceholdersPass.php | 2 ++ .../EnvPlaceholderParameterBag.php | 5 ++++ .../ValidateEnvPlaceholdersPassTest.php | 28 ++++++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php index 58fc95b5fc55c..402aca6378b63 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ValidateEnvPlaceholdersPass.php @@ -84,6 +84,8 @@ public function process(ContainerBuilder $container) } finally { BaseNode::resetPlaceholders(); } + + $resolvingBag->clearUnusedEnvPlaceholders(); } private static function getType($value): string diff --git a/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php b/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php index 3c68af031f406..20fc77c8b4693 100644 --- a/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php +++ b/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php @@ -87,6 +87,11 @@ public function getUnusedEnvPlaceholders(): array return $this->unusedEnvPlaceholders; } + public function clearUnusedEnvPlaceholders() + { + $this->unusedEnvPlaceholders = array(); + } + /** * Merges the env placeholders of another EnvPlaceholderParameterBag. */ diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php index 0fb2f6dc91a43..b5841f343a4e8 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php @@ -226,7 +226,7 @@ public function testEnvWithVariableNode(): void public function testConfigurationWithoutRootNode(): void { $container = new ContainerBuilder(); - $container->registerExtension($ext = new EnvExtension(new EnvConfigurationWithoutRootNode())); + $container->registerExtension(new EnvExtension(new EnvConfigurationWithoutRootNode())); $container->loadFromExtension('env_extension'); $this->doProcess($container); @@ -234,6 +234,21 @@ public function testConfigurationWithoutRootNode(): void $this->addToAssertionCount(1); } + public function testDiscardedEnvInConfig(): void + { + $container = new ContainerBuilder(); + $container->setParameter('env(BOOLISH)', '1'); + $container->setParameter('boolish', '%env(BOOLISH)%'); + $container->registerExtension(new EnvExtension()); + $container->prependExtensionConfig('env_extension', array( + 'array_node' => array('bool_force_cast' => '%boolish%'), + )); + + $container->compile(true); + + $this->assertSame('1', $container->getParameter('boolish')); + } + private function doProcess(ContainerBuilder $container): void { (new MergeExtensionConfigurationPass())->process($container); @@ -260,8 +275,19 @@ public function getConfigTreeBuilder() ->ifTrue(function ($value) { return !is_array($value); }) ->then(function ($value) { return array('child_node' => $value); }) ->end() + ->beforeNormalization() + ->ifArray() + ->then(function (array $v) { + if (isset($v['bool_force_cast'])) { + $v['bool_force_cast'] = (bool) $v['bool_force_cast']; + } + + return $v; + }) + ->end() ->children() ->scalarNode('child_node')->end() + ->booleanNode('bool_force_cast')->end() ->integerNode('int_unset_at_zero') ->validate() ->ifTrue(function ($value) { return 0 === $value; }) From d1f41601f4c209d124849cd1263d46e3b25f08e8 Mon Sep 17 00:00:00 2001 From: "Alexander M. Turek" Date: Fri, 22 Jun 2018 17:01:26 +0200 Subject: [PATCH 096/108] The debug class loader is always loaded by Debug::enable(). --- src/Symfony/Component/Debug/Debug.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Symfony/Component/Debug/Debug.php b/src/Symfony/Component/Debug/Debug.php index c67a65c4066f7..9866f386a16c2 100644 --- a/src/Symfony/Component/Debug/Debug.php +++ b/src/Symfony/Component/Debug/Debug.php @@ -23,10 +23,7 @@ class Debug /** * Enables the debug tools. * - * This method registers an error handler and an exception handler. - * - * If the Symfony ClassLoader component is available, a special - * class loader is also registered. + * This method registers an error handler, an exception handler and a special class loader. * * @param int $errorReportingLevel The level of error reporting you want * @param bool $displayErrors Whether to display errors (for development) or just log them (for production) From aa50ffcd0e28299ce28230a1da76e623924d931d Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sat, 23 Jun 2018 00:10:00 +0200 Subject: [PATCH 097/108] [HttpKernel] fix argument's error messages in ServiceValueResolver --- .../ArgumentResolver/ServiceValueResolver.php | 2 +- .../ServiceValueResolverTest.php | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/ServiceValueResolver.php b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/ServiceValueResolver.php index e4c578596ba26..a2ab592ad0255 100644 --- a/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/ServiceValueResolver.php +++ b/src/Symfony/Component/HttpKernel/Controller/ArgumentResolver/ServiceValueResolver.php @@ -68,7 +68,7 @@ public function resolve(Request $request, ArgumentMetadata $argument) yield $this->container->get($controller)->get($argument->getName()); } catch (RuntimeException $e) { $what = sprintf('argument $%s of "%s()"', $argument->getName(), $controller); - $message = preg_replace('/service "service_locator\.[^"]++"/', $what, $e->getMessage()); + $message = preg_replace('/service "\.service_locator\.[^"]++"/', $what, $e->getMessage()); if ($e->getMessage() === $message) { $message = sprintf('Cannot resolve %s: %s', $what, $message); diff --git a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php index 7d34172ce3d8f..33b64d54480f2 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/ServiceValueResolverTest.php @@ -12,10 +12,12 @@ namespace Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver; use PHPUnit\Framework\TestCase; +use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ServiceLocator; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Controller\ArgumentResolver\ServiceValueResolver; use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; +use Symfony\Component\HttpKernel\DependencyInjection\RegisterControllerArgumentLocatorsPass; class ServiceValueResolverTest extends TestCase { @@ -85,6 +87,25 @@ public function testControllerNameIsAnArray() $this->assertYieldEquals(array(new DummyService()), $resolver->resolve($request, $argument)); } + /** + * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException + * @expectedExceptionMessage Cannot autowire argument $dummy of "Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver\DummyController::index()": it references class "Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver\DummyService" but no such service exists. + */ + public function testErrorIsTruncated() + { + $container = new ContainerBuilder(); + $container->addCompilerPass(new RegisterControllerArgumentLocatorsPass()); + + $container->register('argument_resolver.service', ServiceValueResolver::class)->addArgument(null)->setPublic(true); + $container->register(DummyController::class)->addTag('controller.service_arguments')->setPublic(true); + + $container->compile(); + + $request = $this->requestWithAttributes(array('_controller' => array(DummyController::class, 'index'))); + $argument = new ArgumentMetadata('dummy', DummyService::class, false, false, null); + $container->get('argument_resolver.service')->resolve($request, $argument)->current(); + } + private function requestWithAttributes(array $attributes) { $request = Request::create('/'); @@ -110,3 +131,10 @@ private function assertYieldEquals(array $expected, \Generator $generator) class DummyService { } + +class DummyController +{ + public function index(DummyService $dummy) + { + } +} From 1435d677bec7fb49350acb84d8bc8100024b83c9 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 15 Jun 2018 20:19:15 +0200 Subject: [PATCH 098/108] [VarDumper] Fix dumping by splitting Server/Connection out of Dumper/ServerDumper --- .../DependencyInjection/DebugExtension.php | 26 +++-- .../DebugBundle/Resources/config/services.xml | 8 +- src/Symfony/Bundle/DebugBundle/composer.json | 2 +- .../DataCollector/DumpDataCollector.php | 27 +++--- .../HttpKernel/EventListener/DumpListener.php | 14 ++- .../DataCollector/DumpDataCollectorTest.php | 8 +- .../Component/HttpKernel/composer.json | 4 +- .../VarDumper/Dumper/AbstractDumper.php | 2 +- .../VarDumper/Dumper/ServerDumper.php | 76 ++------------- .../Resources/css/htmlDescriptor.css | 14 ++- .../Component/VarDumper/Server/Connection.php | 97 +++++++++++++++++++ .../Tests/Dumper/ServerDumperTest.php | 10 +- .../VarDumper/Tests/Fixtures/dump_server.php | 2 + .../VarDumper/Tests/Server/ConnectionTest.php | 88 +++++++++++++++++ 14 files changed, 252 insertions(+), 126 deletions(-) create mode 100644 src/Symfony/Component/VarDumper/Server/Connection.php create mode 100644 src/Symfony/Component/VarDumper/Tests/Server/ConnectionTest.php diff --git a/src/Symfony/Bundle/DebugBundle/DependencyInjection/DebugExtension.php b/src/Symfony/Bundle/DebugBundle/DependencyInjection/DebugExtension.php index a81c495970b19..aa124a8c03b26 100644 --- a/src/Symfony/Bundle/DebugBundle/DependencyInjection/DebugExtension.php +++ b/src/Symfony/Bundle/DebugBundle/DependencyInjection/DebugExtension.php @@ -17,7 +17,6 @@ use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\VarDumper\Dumper\ServerDumper; /** * DebugExtension. @@ -43,20 +42,21 @@ public function load(array $configs, ContainerBuilder $container) ->addMethodCall('setMaxString', array($config['max_string_length'])); if (null === $config['dump_destination']) { - //no-op + $container->getDefinition('var_dumper.command.server_dump') + ->setClass(ServerDumpPlaceholderCommand::class) + ; } elseif (0 === strpos($config['dump_destination'], 'tcp://')) { - $serverDumperHost = $config['dump_destination']; $container->getDefinition('debug.dump_listener') - ->replaceArgument(1, new Reference('var_dumper.server_dumper')) + ->replaceArgument(2, new Reference('var_dumper.server_connection')) ; $container->getDefinition('data_collector.dump') - ->replaceArgument(4, new Reference('var_dumper.server_dumper')) + ->replaceArgument(4, new Reference('var_dumper.server_connection')) ; $container->getDefinition('var_dumper.dump_server') - ->replaceArgument(0, $serverDumperHost) + ->replaceArgument(0, $config['dump_destination']) ; - $container->getDefinition('var_dumper.server_dumper') - ->replaceArgument(0, $serverDumperHost) + $container->getDefinition('var_dumper.server_connection') + ->replaceArgument(0, $config['dump_destination']) ; } else { $container->getDefinition('var_dumper.cli_dumper') @@ -65,13 +65,9 @@ public function load(array $configs, ContainerBuilder $container) $container->getDefinition('data_collector.dump') ->replaceArgument(4, new Reference('var_dumper.cli_dumper')) ; - } - - if (!isset($serverDumperHost)) { - $container->getDefinition('var_dumper.command.server_dump')->setClass(ServerDumpPlaceholderCommand::class); - if (!class_exists(ServerDumper::class)) { - $container->removeDefinition('var_dumper.command.server_dump'); - } + $container->getDefinition('var_dumper.command.server_dump') + ->setClass(ServerDumpPlaceholderCommand::class) + ; } } diff --git a/src/Symfony/Bundle/DebugBundle/Resources/config/services.xml b/src/Symfony/Bundle/DebugBundle/Resources/config/services.xml index a0bbde8d3d8d3..b878ee5b62584 100644 --- a/src/Symfony/Bundle/DebugBundle/Resources/config/services.xml +++ b/src/Symfony/Bundle/DebugBundle/Resources/config/services.xml @@ -23,13 +23,14 @@ %kernel.charset% - null + null + null @@ -50,9 +51,8 @@ - - null - + + diff --git a/src/Symfony/Bundle/DebugBundle/composer.json b/src/Symfony/Bundle/DebugBundle/composer.json index 7897621b54e10..e909b45814f7f 100644 --- a/src/Symfony/Bundle/DebugBundle/composer.json +++ b/src/Symfony/Bundle/DebugBundle/composer.json @@ -20,7 +20,7 @@ "ext-xml": "*", "symfony/http-kernel": "~3.4|~4.0", "symfony/twig-bridge": "~3.4|~4.0", - "symfony/var-dumper": "~4.1" + "symfony/var-dumper": "^4.1.1" }, "require-dev": { "symfony/config": "~3.4|~4.0", diff --git a/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php index cab37ecafe5ea..44d6c5dc731d5 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/DumpDataCollector.php @@ -21,7 +21,7 @@ use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider; use Symfony\Component\VarDumper\Dumper\HtmlDumper; use Symfony\Component\VarDumper\Dumper\DataDumperInterface; -use Symfony\Component\VarDumper\Dumper\ServerDumper; +use Symfony\Component\VarDumper\Server\Connection; /** * @author Nicolas Grekas @@ -38,17 +38,18 @@ class DumpDataCollector extends DataCollector implements DataDumperInterface private $charset; private $requestStack; private $dumper; - private $dumperIsInjected; private $sourceContextProvider; - public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null, string $charset = null, RequestStack $requestStack = null, DataDumperInterface $dumper = null) + /** + * @param DataDumperInterface|Connection|null $dumper + */ + public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null, string $charset = null, RequestStack $requestStack = null, $dumper = null) { $this->stopwatch = $stopwatch; $this->fileLinkFormat = $fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format'); $this->charset = $charset ?: ini_get('php.output_encoding') ?: ini_get('default_charset') ?: 'UTF-8'; $this->requestStack = $requestStack; $this->dumper = $dumper; - $this->dumperIsInjected = null !== $dumper; // All clones share these properties by reference: $this->rootRefs = array( @@ -58,7 +59,7 @@ public function __construct(Stopwatch $stopwatch = null, $fileLinkFormat = null, &$this->clonesCount, ); - $this->sourceContextProvider = $dumper instanceof ServerDumper && isset($dumper->getContextProviders()['source']) ? $dumper->getContextProviders()['source'] : new SourceContextProvider($this->charset); + $this->sourceContextProvider = $dumper instanceof Connection && isset($dumper->getContextProviders()['source']) ? $dumper->getContextProviders()['source'] : new SourceContextProvider($this->charset); } public function __clone() @@ -71,14 +72,17 @@ public function dump(Data $data) if ($this->stopwatch) { $this->stopwatch->start('dump'); } - if ($this->isCollected && !$this->dumper) { - $this->isCollected = false; - } list('name' => $name, 'file' => $file, 'line' => $line, 'file_excerpt' => $fileExcerpt) = $this->sourceContextProvider->getContext(); - if ($this->dumper) { + if ($this->dumper instanceof Connection) { + if (!$this->dumper->write($data)) { + $this->isCollected = false; + } + } elseif ($this->dumper) { $this->doDump($this->dumper, $data, $name, $file, $line); + } else { + $this->isCollected = false; } $this->data[] = compact('data', 'name', 'file', 'line', 'fileExcerpt'); @@ -141,9 +145,6 @@ public function serialize() $this->data = array(); $this->dataCount = 0; $this->isCollected = true; - if (!$this->dumperIsInjected) { - $this->dumper = null; - } return $ser; } @@ -245,7 +246,7 @@ private function doDump(DataDumperInterface $dumper, $data, $name, $file, $line) }; $contextDumper = $contextDumper->bindTo($dumper, $dumper); $contextDumper($name, $file, $line, $this->fileLinkFormat); - } elseif (!$dumper instanceof ServerDumper) { + } else { $cloner = new VarCloner(); $dumper->dump($cloner->cloneVar($name.' on line '.$line.':')); } diff --git a/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php b/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php index de19e13113e59..3acbe7d46c867 100644 --- a/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php +++ b/src/Symfony/Component/HttpKernel/EventListener/DumpListener.php @@ -15,6 +15,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\VarDumper\Cloner\ClonerInterface; use Symfony\Component\VarDumper\Dumper\DataDumperInterface; +use Symfony\Component\VarDumper\Server\Connection; use Symfony\Component\VarDumper\VarDumper; /** @@ -26,20 +27,27 @@ class DumpListener implements EventSubscriberInterface { private $cloner; private $dumper; + private $connection; - public function __construct(ClonerInterface $cloner, DataDumperInterface $dumper) + public function __construct(ClonerInterface $cloner, DataDumperInterface $dumper, Connection $connection = null) { $this->cloner = $cloner; $this->dumper = $dumper; + $this->connection = $connection; } public function configure() { $cloner = $this->cloner; $dumper = $this->dumper; + $connection = $this->connection; - VarDumper::setHandler(function ($var) use ($cloner, $dumper) { - $dumper->dump($cloner->cloneVar($var)); + VarDumper::setHandler(static function ($var) use ($cloner, $dumper, $connection) { + $data = $cloner->cloneVar($var); + + if (!$connection || !$connection->write($data)) { + $dumper->dump($data); + } }); } diff --git a/src/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php b/src/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php index adfb3567c6777..57384a79ffe92 100644 --- a/src/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/DataCollector/DumpDataCollectorTest.php @@ -17,7 +17,7 @@ use Symfony\Component\HttpKernel\DataCollector\DumpDataCollector; use Symfony\Component\VarDumper\Cloner\Data; use Symfony\Component\VarDumper\Dumper\CliDumper; -use Symfony\Component\VarDumper\Dumper\ServerDumper; +use Symfony\Component\VarDumper\Server\Connection; /** * @author Nicolas Grekas @@ -57,13 +57,13 @@ public function testDump() $this->assertSame('a:2:{i:0;b:0;i:1;s:5:"UTF-8";}', $collector->serialize()); } - public function testDumpWithServerDumper() + public function testDumpWithServerConnection() { $data = new Data(array(array(123))); // Server is up, server dumper is used - $serverDumper = $this->getMockBuilder(ServerDumper::class)->disableOriginalConstructor()->getMock(); - $serverDumper->expects($this->once())->method('dump'); + $serverDumper = $this->getMockBuilder(Connection::class)->disableOriginalConstructor()->getMock(); + $serverDumper->expects($this->once())->method('write')->willReturn(true); $collector = new DumpDataCollector(null, null, null, null, $serverDumper); $collector->dump($data); diff --git a/src/Symfony/Component/HttpKernel/composer.json b/src/Symfony/Component/HttpKernel/composer.json index e610f27418777..453561f62d086 100644 --- a/src/Symfony/Component/HttpKernel/composer.json +++ b/src/Symfony/Component/HttpKernel/composer.json @@ -37,7 +37,7 @@ "symfony/stopwatch": "~3.4|~4.0", "symfony/templating": "~3.4|~4.0", "symfony/translation": "~3.4|~4.0", - "symfony/var-dumper": "~4.1", + "symfony/var-dumper": "^4.1.1", "psr/cache": "~1.0" }, "provide": { @@ -46,7 +46,7 @@ "conflict": { "symfony/config": "<3.4", "symfony/dependency-injection": "<4.1", - "symfony/var-dumper": "<4.1", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "suggest": { diff --git a/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php b/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php index 73b5f643a724d..01437d94c7e6a 100644 --- a/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/AbstractDumper.php @@ -164,7 +164,7 @@ public function dump(Data $data, $output = null) */ protected function dumpLine($depth) { - call_user_func($this->lineDumper, $this->line, $depth, $this->indentPad); + \call_user_func($this->lineDumper, $this->line, $depth, $this->indentPad); $this->line = ''; } diff --git a/src/Symfony/Component/VarDumper/Dumper/ServerDumper.php b/src/Symfony/Component/VarDumper/Dumper/ServerDumper.php index 7a25fed61480d..32e1f124cc021 100644 --- a/src/Symfony/Component/VarDumper/Dumper/ServerDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/ServerDumper.php @@ -13,6 +13,7 @@ use Symfony\Component\VarDumper\Cloner\Data; use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface; +use Symfony\Component\VarDumper\Server\Connection; /** * ServerDumper forwards serialized Data clones to a server. @@ -21,10 +22,8 @@ */ class ServerDumper implements DataDumperInterface { - private $host; + private $connection; private $wrappedDumper; - private $contextProviders; - private $socket; /** * @param string $host The server host @@ -33,83 +32,22 @@ class ServerDumper implements DataDumperInterface */ public function __construct(string $host, DataDumperInterface $wrappedDumper = null, array $contextProviders = array()) { - if (false === strpos($host, '://')) { - $host = 'tcp://'.$host; - } - - $this->host = $host; + $this->connection = new Connection($host, $contextProviders); $this->wrappedDumper = $wrappedDumper; - $this->contextProviders = $contextProviders; } public function getContextProviders(): array { - return $this->contextProviders; + return $this->connection->getContextProviders(); } /** * {@inheritdoc} */ - public function dump(Data $data, $output = null): void - { - set_error_handler(array(self::class, 'nullErrorHandler')); - - $failed = false; - try { - if (!$this->socket = $this->socket ?: $this->createSocket()) { - $failed = true; - - return; - } - } finally { - restore_error_handler(); - if ($failed && $this->wrappedDumper) { - $this->wrappedDumper->dump($data); - } - } - - set_error_handler(array(self::class, 'nullErrorHandler')); - - $context = array('timestamp' => time()); - foreach ($this->contextProviders as $name => $provider) { - $context[$name] = $provider->getContext(); - } - $context = array_filter($context); - - $encodedPayload = base64_encode(serialize(array($data, $context)))."\n"; - $failed = false; - - try { - $retry = 3; - while ($retry > 0 && $failed = (-1 === stream_socket_sendto($this->socket, $encodedPayload))) { - stream_socket_shutdown($this->socket, STREAM_SHUT_RDWR); - if ($failed = !$this->socket = $this->createSocket()) { - break; - } - - --$retry; - } - } finally { - restore_error_handler(); - if ($failed && $this->wrappedDumper) { - $this->wrappedDumper->dump($data); - } - } - } - - private static function nullErrorHandler() + public function dump(Data $data) { - // noop - } - - private function createSocket() - { - $socket = stream_socket_client($this->host, $errno, $errstr, 1, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT); - - if ($socket) { - stream_set_blocking($socket, false); + if (!$this->connection->write($data) && $this->wrappedDumper) { + $this->wrappedDumper->dump($data); } - - return $socket; } } diff --git a/src/Symfony/Component/VarDumper/Resources/css/htmlDescriptor.css b/src/Symfony/Component/VarDumper/Resources/css/htmlDescriptor.css index babb7ddbbc822..4277c6809bc32 100644 --- a/src/Symfony/Component/VarDumper/Resources/css/htmlDescriptor.css +++ b/src/Symfony/Component/VarDumper/Resources/css/htmlDescriptor.css @@ -22,14 +22,6 @@ a { a:hover { text-decoration: underline; } -code { - color: #cc2255; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - border-radius: 3px; - margin-right: 5px; - padding: 0 3px; -} .text-small { font-size: 12px !important; } @@ -60,6 +52,12 @@ article > header > .row > h2 { article > header > .row > h2 > code { white-space: nowrap; user-select: none; + color: #cc2255; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + border-radius: 3px; + margin-right: 5px; + padding: 0 3px; } article > header > .row > time.col { flex: 0; diff --git a/src/Symfony/Component/VarDumper/Server/Connection.php b/src/Symfony/Component/VarDumper/Server/Connection.php new file mode 100644 index 0000000000000..d447b0a98ebc2 --- /dev/null +++ b/src/Symfony/Component/VarDumper/Server/Connection.php @@ -0,0 +1,97 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Server; + +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface; + +/** + * Forwards serialized Data clones to a server. + * + * @author Maxime Steinhausser + */ +class Connection +{ + private $host; + private $contextProviders; + private $socket; + + /** + * @param string $host The server host + * @param ContextProviderInterface[] $contextProviders Context providers indexed by context name + */ + public function __construct(string $host, array $contextProviders = array()) + { + if (false === strpos($host, '://')) { + $host = 'tcp://'.$host; + } + + $this->host = $host; + $this->contextProviders = $contextProviders; + } + + public function getContextProviders(): array + { + return $this->contextProviders; + } + + public function write(Data $data): bool + { + $socketIsFresh = !$this->socket; + if (!$this->socket = $this->socket ?: $this->createSocket()) { + return false; + } + + $context = array('timestamp' => microtime(true)); + foreach ($this->contextProviders as $name => $provider) { + $context[$name] = $provider->getContext(); + } + $context = array_filter($context); + $encodedPayload = base64_encode(serialize(array($data, $context)))."\n"; + + set_error_handler(array(self::class, 'nullErrorHandler')); + try { + if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) { + return true; + } + if (!$socketIsFresh) { + stream_socket_shutdown($this->socket, STREAM_SHUT_RDWR); + fclose($this->socket); + $this->socket = $this->createSocket(); + } + if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) { + return true; + } + } finally { + restore_error_handler(); + } + + return false; + } + + private static function nullErrorHandler($t, $m) + { + // no-op + } + + private function createSocket() + { + set_error_handler(array(self::class, 'nullErrorHandler')); + try { + return stream_socket_client($this->host, $errno, $errstr, 3, STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT); + } finally { + restore_error_handler(); + } + + return $socket; + } +} diff --git a/src/Symfony/Component/VarDumper/Tests/Dumper/ServerDumperTest.php b/src/Symfony/Component/VarDumper/Tests/Dumper/ServerDumperTest.php index f41d4c2641ec3..288391bfcfef3 100644 --- a/src/Symfony/Component/VarDumper/Tests/Dumper/ServerDumperTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Dumper/ServerDumperTest.php @@ -55,26 +55,24 @@ public function getContext(): ?array $dumped = null; $process = $this->getServerProcess(); - $process->start(function ($type, $buffer) use ($process, &$dumped) { + $process->start(function ($type, $buffer) use ($process, &$dumped, $dumper, $data) { if (Process::ERR === $type) { $process->stop(); $this->fail(); + } elseif ("READY\n" === $buffer) { + $dumper->dump($data); } else { $dumped .= $buffer; } }); - sleep(3); - - $dumper->dump($data); - $process->wait(); $this->assertTrue($process->isSuccessful()); $this->assertStringMatchesFormat(<<<'DUMP' (3) "foo" [ - "timestamp" => %d + "timestamp" => %d.%d "foo_provider" => [ (3) "foo" ] diff --git a/src/Symfony/Component/VarDumper/Tests/Fixtures/dump_server.php b/src/Symfony/Component/VarDumper/Tests/Fixtures/dump_server.php index 5c79ea5151dce..ed8bbfba58259 100644 --- a/src/Symfony/Component/VarDumper/Tests/Fixtures/dump_server.php +++ b/src/Symfony/Component/VarDumper/Tests/Fixtures/dump_server.php @@ -29,6 +29,8 @@ $server->start(); +echo "READY\n"; + $server->listen(function (Data $data, array $context, $clientId) { dump((string) $data, $context, $clientId); diff --git a/src/Symfony/Component/VarDumper/Tests/Server/ConnectionTest.php b/src/Symfony/Component/VarDumper/Tests/Server/ConnectionTest.php new file mode 100644 index 0000000000000..eeb7495dac1f7 --- /dev/null +++ b/src/Symfony/Component/VarDumper/Tests/Server/ConnectionTest.php @@ -0,0 +1,88 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarDumper\Tests\Server; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\Process\PhpProcess; +use Symfony\Component\Process\Process; +use Symfony\Component\VarDumper\Cloner\VarCloner; +use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface; +use Symfony\Component\VarDumper\Server\Connection; + +class ConnectionTest extends TestCase +{ + private const VAR_DUMPER_SERVER = 'tcp://127.0.0.1:9913'; + + public function testDump() + { + $cloner = new VarCloner(); + $data = $cloner->cloneVar('foo'); + $connection = new Connection(self::VAR_DUMPER_SERVER, array( + 'foo_provider' => new class() implements ContextProviderInterface { + public function getContext(): ?array + { + return array('foo'); + } + }, + )); + + $dumped = null; + $process = $this->getServerProcess(); + $process->start(function ($type, $buffer) use ($process, &$dumped, $connection, $data) { + if (Process::ERR === $type) { + $process->stop(); + $this->fail(); + } elseif ("READY\n" === $buffer) { + $connection->write($data); + } else { + $dumped .= $buffer; + } + }); + + $process->wait(); + + $this->assertTrue($process->isSuccessful()); + $this->assertStringMatchesFormat(<<<'DUMP' +(3) "foo" +[ + "timestamp" => %d.%d + "foo_provider" => [ + (3) "foo" + ] +] +%d + +DUMP + , $dumped); + } + + public function testNoServer() + { + $cloner = new VarCloner(); + $data = $cloner->cloneVar('foo'); + $connection = new Connection(self::VAR_DUMPER_SERVER); + $start = microtime(true); + $this->assertFalse($connection->write($data)); + $this->assertLessThan(1, microtime(true) - $start); + } + + private function getServerProcess(): Process + { + $process = new PhpProcess(file_get_contents(__DIR__.'/../Fixtures/dump_server.php'), null, array( + 'COMPONENT_ROOT' => __DIR__.'/../../', + 'VAR_DUMPER_SERVER' => self::VAR_DUMPER_SERVER, + )); + $process->inheritEnvironmentVariables(true); + + return $process->setTimeout(9); + } +} From b58eb0117fb7f016b8b225573b095a4b5b911818 Mon Sep 17 00:00:00 2001 From: Roland Franssen Date: Sat, 23 Jun 2018 14:49:00 +0200 Subject: [PATCH 099/108] [DI] Resolve env placeholder in logs --- src/Symfony/Component/DependencyInjection/ContainerBuilder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php index 7296a098ee0ed..dc2d36053ee0d 100644 --- a/src/Symfony/Component/DependencyInjection/ContainerBuilder.php +++ b/src/Symfony/Component/DependencyInjection/ContainerBuilder.php @@ -1479,7 +1479,7 @@ public function getNormalizedIds() */ public function log(CompilerPassInterface $pass, $message) { - $this->getCompiler()->log($pass, $message); + $this->getCompiler()->log($pass, $this->resolveEnvPlaceholders($message)); } /** From 8e060fa45d1f24fafdac96bf0e67b275550f56c8 Mon Sep 17 00:00:00 2001 From: Roland Franssen Date: Sat, 23 Jun 2018 15:02:32 +0200 Subject: [PATCH 100/108] [DI] Cleanup unused service_subscriber.locator tag --- .../Compiler/ResolveServiceSubscribersPass.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveServiceSubscribersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveServiceSubscribersPass.php index bde9433690f95..ccc80a443e420 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveServiceSubscribersPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveServiceSubscribersPass.php @@ -35,7 +35,12 @@ protected function processValue($value, $isRoot = false) } $serviceLocator = $this->serviceLocator; - $this->serviceLocator = $value->hasTag('container.service_subscriber.locator') ? $value->getTag('container.service_subscriber.locator')[0]['id'] : null; + $this->serviceLocator = null; + + if ($value->hasTag('container.service_subscriber.locator')) { + $this->serviceLocator = $value->getTag('container.service_subscriber.locator')[0]['id']; + $value->clearTag('container.service_subscriber.locator'); + } try { return parent::processValue($value); From a3a9e2ec19fd0f0ea795331a92e0686ed223dc73 Mon Sep 17 00:00:00 2001 From: Vladimir Reznichenko Date: Sat, 23 Jun 2018 13:52:31 +0200 Subject: [PATCH 101/108] [Di] Fix undefined variable found by Php Inspections (EA Ultimate) --- src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 560b2516bb3c4..7c493f62e365c 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -501,7 +501,7 @@ private function addServiceInlinedDefinitions($id, Definition $definition, \SplO // $b = new ServiceB(); // $a = new ServiceA(ServiceB $b); // $b->setServiceA(ServiceA $a); - if (isset($inlinedDefinition[$definition]) && $this->hasReference($id, array($def->getArguments(), $def->getFactory()))) { + if (isset($inlinedDefinitions[$definition]) && $this->hasReference($id, array($def->getArguments(), $def->getFactory()))) { throw new ServiceCircularReferenceException($id, array($id)); } From db88330448f10fa50a1d19f75828ebbf4001ccb3 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 25 Jun 2018 11:35:14 +0200 Subject: [PATCH 102/108] [SecurityBundle] Dont throw if "security.http_utils" is not found --- .../Compiler/AddSessionDomainConstraintPass.php | 3 +-- .../Compiler/AddSessionDomainConstraintPassTest.php | 13 ------------- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddSessionDomainConstraintPass.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddSessionDomainConstraintPass.php index ba523382b66ba..3dd18944de9f3 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddSessionDomainConstraintPass.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddSessionDomainConstraintPass.php @@ -26,7 +26,7 @@ class AddSessionDomainConstraintPass implements CompilerPassInterface */ public function process(ContainerBuilder $container) { - if (!$container->hasParameter('session.storage.options')) { + if (!$container->hasParameter('session.storage.options') || !$container->has('security.http_utils')) { return; } @@ -34,7 +34,6 @@ public function process(ContainerBuilder $container) $domainRegexp = empty($sessionOptions['cookie_domain']) ? '%s' : sprintf('(?:%%s|(?:.+\.)?%s)', preg_quote(trim($sessionOptions['cookie_domain'], '.'))); $domainRegexp = (empty($sessionOptions['cookie_secure']) ? 'https?://' : 'https://').$domainRegexp; - // if the service doesn't exist, an exception must be thrown - ignoring would put security at risk $container->findDefinition('security.http_utils')->addArgument(sprintf('{^%s$}i', $domainRegexp)); } } diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php index a836ab136cd93..382bdebe018fa 100644 --- a/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php +++ b/src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php @@ -96,19 +96,6 @@ public function testNoSession() $this->assertTrue($utils->createRedirectResponse($request, 'http://pirate.com/foo')->isRedirect('http://pirate.com/foo')); } - /** - * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException - * @expectedExceptionMessage You have requested a non-existent service "security.http_utils". - */ - public function testNoHttpUtils() - { - $container = new ContainerBuilder(); - $container->setParameter('session.storage.options', array()); - - $pass = new AddSessionDomainConstraintPass(); - $pass->process($container); - } - private function createContainer($sessionStorageOptions) { $container = new ContainerBuilder(); From f75723f38aaa78bc28ebea8a1d4a06f7b53cf6af Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 25 Jun 2018 11:49:25 +0200 Subject: [PATCH 103/108] [TwigBundle] bump lowest deps to fix issue with "double-colon" controller service refs --- src/Symfony/Bundle/TwigBundle/composer.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Symfony/Bundle/TwigBundle/composer.json b/src/Symfony/Bundle/TwigBundle/composer.json index ab5c539735e25..de97926e2cfcf 100644 --- a/src/Symfony/Bundle/TwigBundle/composer.json +++ b/src/Symfony/Bundle/TwigBundle/composer.json @@ -19,29 +19,29 @@ "php": "^7.1.3", "symfony/config": "~3.4|~4.0", "symfony/twig-bridge": "^3.4.3|^4.0.3", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/http-kernel": "~3.4|~4.0", + "symfony/http-foundation": "~4.1", + "symfony/http-kernel": "~4.1", "symfony/polyfill-ctype": "~1.8", "twig/twig": "~1.34|~2.4" }, "require-dev": { "symfony/asset": "~3.4|~4.0", "symfony/stopwatch": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", + "symfony/dependency-injection": "~4.1", "symfony/expression-language": "~3.4|~4.0", "symfony/finder": "~3.4|~4.0", "symfony/form": "~3.4|~4.0", "symfony/routing": "~3.4|~4.0", "symfony/templating": "~3.4|~4.0", "symfony/yaml": "~3.4|~4.0", - "symfony/framework-bundle": "~3.4|~4.0", + "symfony/framework-bundle": "~4.1", "symfony/web-link": "~3.4|~4.0", "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0" }, "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/event-dispatcher": "<3.4" + "symfony/dependency-injection": "<4.1", + "symfony/framework-bundle": "<4.1" }, "autoload": { "psr-4": { "Symfony\\Bundle\\TwigBundle\\": "" }, From 140b6c210155413d6a95f1464107b2a365069afa Mon Sep 17 00:00:00 2001 From: Felix Nagel Date: Tue, 5 Jun 2018 09:42:58 +0200 Subject: [PATCH 104/108] Add note about changed form processing when using PUT requests See https://github.com/symfony/symfony/issues/8261 --- UPGRADE-3.0.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md index f9524e7710f16..9ec4987b3b73e 100644 --- a/UPGRADE-3.0.md +++ b/UPGRADE-3.0.md @@ -595,6 +595,24 @@ UPGRADE FROM 2.x to 3.0 } } ``` + + If the form is submitted with a different request method than `POST`, you need to configure this in the form: + + Before: + + ```php + $form = $this->createForm(FormType::class, $entity); + $form->submit($request); + ``` + + After: + + ```php + $form = $this->createForm(FormType::class, $entity, [ + 'method' => 'PUT', + ]); + $form->handleRequest($request); + ``` * The events `PRE_BIND`, `BIND` and `POST_BIND` were renamed to `PRE_SUBMIT`, `SUBMIT` and `POST_SUBMIT`. From cccb66f4c6aef7f5a08d622df4277f7c884b667f Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Mon, 18 Jun 2018 08:55:09 +0100 Subject: [PATCH 105/108] [TwigBundle][DX] Only add the Twig WebLinkExtension if the WebLink component is enabled --- .../Bridge/Twig/UndefinedCallableHandler.php | 23 ++++++++++++++++--- .../Compiler/ExtensionPass.php | 4 ++++ .../DependencyInjection/TwigExtension.php | 9 -------- .../TwigBundle/Resources/config/twig.xml | 4 ++++ 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Bridge/Twig/UndefinedCallableHandler.php b/src/Symfony/Bridge/Twig/UndefinedCallableHandler.php index 77c78ce38f530..c81d1cac7d3d0 100644 --- a/src/Symfony/Bridge/Twig/UndefinedCallableHandler.php +++ b/src/Symfony/Bridge/Twig/UndefinedCallableHandler.php @@ -11,6 +11,7 @@ namespace Symfony\Bridge\Twig; +use Symfony\Bundle\FullStack; use Twig\Error\SyntaxError; /** @@ -55,14 +56,21 @@ class UndefinedCallableHandler 'workflow_marked_places' => 'workflow', ); + private static $fullStackEnable = array( + 'form' => 'enable "framework.form"', + 'security-core' => 'add the "SecurityBundle"', + 'security-http' => 'add the "SecurityBundle"', + 'web-link' => 'enable "framework.web_link"', + 'workflow' => 'enable "framework.workflows"', + ); + public static function onUndefinedFilter($name) { if (!isset(self::$filterComponents[$name])) { return false; } - // Twig will append the source context to the message, so that it will end up being like "[...] Unknown filter "%s" in foo.html.twig on line 123." - throw new SyntaxError(sprintf('Did you forget to run "composer require symfony/%s"? Unknown filter "%s".', self::$filterComponents[$name], $name)); + self::onUndefined($name, 'filter', self::$filterComponents[$name]); } public static function onUndefinedFunction($name) @@ -71,6 +79,15 @@ public static function onUndefinedFunction($name) return false; } - throw new SyntaxError(sprintf('Did you forget to run "composer require symfony/%s"? Unknown function "%s".', self::$functionComponents[$name], $name)); + self::onUndefined($name, 'function', self::$functionComponents[$name]); + } + + private static function onUndefined($name, $type, $component) + { + if (\class_exists(FullStack::class) && isset(self::$fullStackEnable[$component])) { + throw new SyntaxError(sprintf('Did you forget to %s? Unknown %s "%s".', self::$fullStackEnable[$component], $type, $name)); + } + + throw new SyntaxError(sprintf('Did you forget to run "composer require symfony/%s"? Unknown %s "%s".', $component, $type, $name)); } } diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php index a4e8c944c92a3..0ca55f298ee83 100644 --- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php +++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/ExtensionPass.php @@ -82,6 +82,10 @@ public function process(ContainerBuilder $container) } } + if ($container->has('web_link.add_link_header_listener')) { + $container->getDefinition('twig.extension.weblink')->addTag('twig.extension'); + } + $twigLoader = $container->getDefinition('twig.loader.native_filesystem'); if ($container->has('templating')) { $loader = $container->getDefinition('twig.loader.filesystem'); diff --git a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php index c3012abbd8e53..1ca688e6b9691 100644 --- a/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php +++ b/src/Symfony/Bundle/TwigBundle/DependencyInjection/TwigExtension.php @@ -11,7 +11,6 @@ namespace Symfony\Bundle\TwigBundle\DependencyInjection; -use Symfony\Bridge\Twig\Extension\WebLinkExtension; use Symfony\Component\Config\FileLocator; use Symfony\Component\Config\Resource\FileExistenceResource; use Symfony\Component\Console\Application; @@ -19,7 +18,6 @@ use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\HttpKernel\DependencyInjection\Extension; -use Symfony\Component\WebLink\HttpHeaderSerializer; use Twig\Extension\ExtensionInterface; use Twig\Extension\RuntimeExtensionInterface; use Twig\Loader\LoaderInterface; @@ -60,13 +58,6 @@ public function load(array $configs, ContainerBuilder $container) $container->removeDefinition('twig.translation.extractor'); } - if (class_exists(HttpHeaderSerializer::class)) { - $definition = $container->register('twig.extension.weblink', WebLinkExtension::class); - $definition->setPublic(false); - $definition->addArgument(new Reference('request_stack')); - $definition->addTag('twig.extension'); - } - foreach ($configs as $key => $config) { if (isset($config['globals'])) { foreach ($config['globals'] as $name => $value) { diff --git a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml index fca4367ba743c..5d014e930c53e 100644 --- a/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml +++ b/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml @@ -114,6 +114,10 @@ + + + + From a22de07c305718d65ecb5e900a3c8e005100282a Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 25 Jun 2018 13:26:20 +0200 Subject: [PATCH 106/108] [DoctrineBridge] blacklist doctrine/common@dev --- composer.json | 2 +- src/Symfony/Bridge/Doctrine/composer.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index f38c72fb8ed06..8c7d87c73c2a9 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "require": { "php": "^5.5.9|>=7.0.8", "ext-xml": "*", - "doctrine/common": "~2.4", + "doctrine/common": "~2.4@stable", "fig/link-util": "^1.0", "twig/twig": "^1.35|^2.4.4", "psr/cache": "~1.0", diff --git a/src/Symfony/Bridge/Doctrine/composer.json b/src/Symfony/Bridge/Doctrine/composer.json index 420535b7516fd..1535f8f42b8f8 100644 --- a/src/Symfony/Bridge/Doctrine/composer.json +++ b/src/Symfony/Bridge/Doctrine/composer.json @@ -17,7 +17,7 @@ ], "require": { "php": "^5.5.9|>=7.0.8", - "doctrine/common": "~2.4", + "doctrine/common": "~2.4@stable", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0" }, From 4216dec479efbf7bed945be1603b3eb7738d869f Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 25 Jun 2018 15:06:25 +0200 Subject: [PATCH 107/108] updated CHANGELOG for 4.1.1 --- CHANGELOG-4.1.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/CHANGELOG-4.1.md b/CHANGELOG-4.1.md index 3f712a6dfd14d..b09b994c5cd63 100644 --- a/CHANGELOG-4.1.md +++ b/CHANGELOG-4.1.md @@ -7,6 +7,62 @@ in 4.1 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.1.0...v4.1.1 +* 4.1.1 (2018-06-25) + + * bug #27626 [TwigBundle][DX] Only add the Twig WebLinkExtension if the WebLink component is enabled (thewilkybarkid) + * bug #27702 [TwigBundle] bump lowest deps to fix issue with "double-colon" controller service refs (nicolas-grekas) + * bug #27701 [SecurityBundle] Dont throw if "security.http_utils" is not found (nicolas-grekas) + * bug #27690 [DI] Resolve env placeholder in logs (ro0NL) + * bug #27687 [HttpKernel] fix argument's error messages in ServiceValueResolver (nicolas-grekas) + * bug #27614 [VarDumper] Fix dumping by splitting Server/Connection out of Dumper/ServerDumper (nicolas-grekas) + * bug #27681 [DI] Avoid leaking unused env placeholders (ro0NL) + * bug #26534 allow_extra_attributes does not throw an exception as documented (deviantintegral) + * bug #27664 [FrameworkBundle] Ignore keepQueryParams attribute when generating route redirect (vudaltsov) + * bug #27668 [Lock] use 'r+' for fopen (fixes issue on Solaris) (fritzmg) + * bug #27669 [Filesystem] fix file lock on SunOS (fritzmg) + * bug #27662 [HttpKernel] fix handling of nested Error instances (xabbuh) + * bug #27651 [Messenger] Fixed MessengerPass::guessHandledClasses return type (massimilianobraglia) + * bug #26845 [Config] Fixing GlobResource when inside phar archive (vworldat) + * bug #27382 [Form] Fix error when rendering a DateIntervalType form with exactly 0 weeks (krixon) + * bug #27309 Fix surrogate not using original request (Toflar) + * bug #27467 [HttpKernel] fix session tracking in surrogate master requests (nicolas-grekas) + * bug #27632 [HttpFoundation] Ensure RedisSessionHandler::updateTimestamp returns a boolean (MatTheCat) + * bug #27630 [Validator][Form] Remove BOM in some xlf files (gautierderuette) + * bug #27596 [Framework][Workflow] Added support for interfaces (vudaltsov) + * bug #27593 [ProxyManagerBridge] Fixed support of private services (nicolas-grekas) + * bug #27591 [VarDumper] Fix dumping ArrayObject and ArrayIterator instances (nicolas-grekas) + * bug #27528 [FrameworkBundle] give access to non-shared services when using test.service_container (nicolas-grekas) + * bug #27584 Avoid calling eval when there is no script embedded in the toolbar (stof) + * bug #27581 Fix bad method call with guard authentication + session migration (weaverryan) + * bug #27576 [Cache] Fix expiry comparisons in array-based pools (nicolas-grekas) + * bug #27566 [FrameworkBundle] fix for allowing single colon controller notation (dmaicher) + * bug #27556 Avoiding session migration for stateless firewall UsernamePasswordJsonAuthenticationListener (weaverryan) + * bug #27452 Avoid migration on stateless firewalls (weaverryan) + * bug #27568 [DI] Deduplicate generated proxy classes (nicolas-grekas) + * bug #27511 [Routing] fix matching host patterns, utf8 prefixes and non-capturing groups (nicolas-grekas) + * bug #27326 [Serializer] deserialize from xml: Fix a collection that contains the only one element (webnet-fr) + * bug #27562 [HttpKernel] Log/Collect exceptions at prio 0 (ro0NL) + * bug #27567 [PhpUnitBridge] Fix error on some Windows OS (Nsbx) + * bug #27357 [Lock] Remove released semaphore (jderusse) + * bug #27416 TagAwareAdapter over non-binary memcached connections corrupts memcache (Aleksey Prilipko) + * bug #27514 [Debug] Pass previous exception to FatalErrorException (pmontoya) + * bug #27516 Revert "bug #26138 [HttpKernel] Catch HttpExceptions when templating is not installed (cilefen)" (nicolas-grekas) + * bug #27501 [FrameworkBundle] Fix test-container on kernel reboot, revert to returning the real container from Client::getContainer() (nicolas-grekas) + * bug #27472 [DI] Ignore missing tree root nodes on validate (ro0NL) + * bug #27458 [WebProfilerBundle] fixed getSession when no session has been set deprecation warnings (GregOriol) + * bug #27318 [Cache] memcache connect should not add duplicate entries on sequential calls (Aleksey Prilipko) + * bug #27498 [Routing] Don't reorder past variable-length placeholders (nanocom, nicolas-grekas) + * bug #27496 [DebugBundle] DebugBundle::registerCommands should be noop (ogizanagi) + * bug #27485 [BrowserKit] Fix a BC break in Client affecting Panthère (dunglas) + * bug #27470 [DI] Remove default env type check on validate (ro0NL) + * bug #27454 [FrameworkBundle][TwigBridge] Fix BC break from strong dependency on CSRF token storage (tgalopin) + * bug #27389 [Serializer] Fix serializer tries to denormalize null values on nullable properties (ogizanagi) + * bug #27272 [FrameworkBundle] Change priority of AddConsoleCommandPass to TYPE_BEFORE_REMOVING (upyx) + * bug #27396 [HttpKernel] fix registering IDE links (nicolas-grekas) + * bug #26973 [HttpKernel] Set first trusted proxy as REMOTE_ADDR in InlineFragmentRenderer. (kmadejski) + * bug #27303 [Process] Consider "executable" suffixes first on Windows (sanmai) + * bug #27297 Triggering RememberMe's loginFail() when token cannot be created (weaverryan) + * 4.1.0 (2018-05-30) * bug #27420 Revert "feature #26702 Mark ExceptionInterfaces throwable (ostrolucky)" (nicolas-grekas) From c02e5001ba13a80b7b5363d93ec21fbeb8557a9b Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 25 Jun 2018 15:06:45 +0200 Subject: [PATCH 108/108] updated VERSION for 4.1.1 --- src/Symfony/Component/HttpKernel/Kernel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index 567268f2e1a8e..1d5d2227579d8 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -63,12 +63,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl private $requestStackSize = 0; private $resetServices = false; - const VERSION = '4.1.1-DEV'; + const VERSION = '4.1.1'; const VERSION_ID = 40101; const MAJOR_VERSION = 4; const MINOR_VERSION = 1; const RELEASE_VERSION = 1; - const EXTRA_VERSION = 'DEV'; + const EXTRA_VERSION = ''; const END_OF_MAINTENANCE = '01/2019'; const END_OF_LIFE = '07/2019';