From e36099503fa9e3fb31506e0e2c618b057621f75a Mon Sep 17 00:00:00 2001 From: Sergey Rabochiy Date: Tue, 15 May 2018 18:05:47 +0700 Subject: [PATCH 01/98] [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 a7a1325eabe98d8e4421622801ee25583f83d957 Mon Sep 17 00:00:00 2001 From: Peter Kokot Date: Wed, 23 May 2018 08:22:59 +0200 Subject: [PATCH 02/98] [Validator] Update sl translation --- .../Validator/Resources/translations/validators.sl.xlf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf b/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf index 834db4015e8e4..6f5fd98ca192e 100644 --- a/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf +++ b/src/Symfony/Component/Validator/Resources/translations/validators.sl.xlf @@ -314,6 +314,10 @@ This is not a valid Business Identifier Code (BIC). To ni veljavna identifikacijska koda podjetja (BIC). + + Error + Napaka + From 87b3ad91d240e1b2a4b5c30e038e177f5cb40c4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ostroluck=C3=BD?= Date: Wed, 23 May 2018 22:28:22 +0200 Subject: [PATCH 03/98] [PhpUnitBridge] silence some stderr outputs --- src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php | 4 ++-- src/Symfony/Bridge/PhpUnit/bin/simple-phpunit | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php b/src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php index 957499dfb6a2b..83f4085c8051e 100644 --- a/src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php +++ b/src/Symfony/Bridge/PhpUnit/Tests/CoverageListenerTest.php @@ -31,11 +31,11 @@ public function test() $dir = __DIR__.'/../Tests/Fixtures/coverage'; $phpunit = $_SERVER['argv'][0]; - exec("$php $phpunit -c $dir/phpunit-without-listener.xml.dist $dir/tests/ --coverage-text", $output); + exec("$php $phpunit -c $dir/phpunit-without-listener.xml.dist $dir/tests/ --coverage-text 2> /dev/null", $output); $output = implode("\n", $output); $this->assertContains('FooCov', $output); - exec("$php $phpunit -c $dir/phpunit-with-listener.xml.dist $dir/tests/ --coverage-text", $output); + exec("$php $phpunit -c $dir/phpunit-with-listener.xml.dist $dir/tests/ --coverage-text 2> /dev/null", $output); $output = implode("\n", $output); $this->assertNotContains('FooCov', $output); $this->assertContains("SutNotFoundTest::test\nCould not find the tested class.", $output); diff --git a/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit b/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit index a824eae8f2ab4..59c7a1fe3565e 100755 --- a/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit +++ b/src/Symfony/Bridge/PhpUnit/bin/simple-phpunit @@ -47,7 +47,7 @@ if ('phpdbg' === PHP_SAPI) { $PHP .= ' -qrr'; } -$COMPOSER = file_exists($COMPOSER = $oldPwd.'/composer.phar') || ($COMPOSER = rtrim('\\' === DIRECTORY_SEPARATOR ? preg_replace('/[\r\n].*/', '', `where.exe composer.phar`) : `which composer.phar`)) +$COMPOSER = file_exists($COMPOSER = $oldPwd.'/composer.phar') || ($COMPOSER = rtrim('\\' === DIRECTORY_SEPARATOR ? preg_replace('/[\r\n].*/', '', `where.exe composer.phar`) : `which composer.phar 2> /dev/null`)) ? $PHP.' '.escapeshellarg($COMPOSER) : 'composer'; From 1314a952cd45525dd7b574d185fa5cafdeba9632 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 24 May 2018 09:11:23 +0200 Subject: [PATCH 04/98] [DI] remove dead code --- .../DependencyInjection/LazyProxy/ProxyHelper.php | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/LazyProxy/ProxyHelper.php b/src/Symfony/Component/DependencyInjection/LazyProxy/ProxyHelper.php index 84686efff5d6a..57ea90eae0e5e 100644 --- a/src/Symfony/Component/DependencyInjection/LazyProxy/ProxyHelper.php +++ b/src/Symfony/Component/DependencyInjection/LazyProxy/ProxyHelper.php @@ -62,17 +62,4 @@ public static function getTypeHint(\ReflectionFunctionAbstract $r, \ReflectionPa return $prefix.$parent->name; } } - - private static function export($value) - { - if (!is_array($value)) { - return var_export($value, true); - } - $code = array(); - foreach ($value as $k => $v) { - $code[] = sprintf('%s => %s', var_export($k, true), self::export($v)); - } - - return sprintf('array(%s)', implode(', ', $code)); - } } From e88e0f30f168958ac311b7d865b26b30a572dac9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Thu, 24 May 2018 13:48:55 +0200 Subject: [PATCH 05/98] [Serializer] Check the value of enable_max_depth if defined --- .../Component/Serializer/Normalizer/AbstractObjectNormalizer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index 08fbc5fa3fd88..e02626a5fdf1c 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -333,6 +333,7 @@ private function isMaxDepthReached(array $attributesMetadata, $class, $attribute { if ( !isset($context[static::ENABLE_MAX_DEPTH]) || + !$context[static::ENABLE_MAX_DEPTH] || !isset($attributesMetadata[$attribute]) || null === $maxDepth = $attributesMetadata[$attribute]->getMaxDepth() ) { From 47f0e732d92f9c52277909978f1c734e276193fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ostroluck=C3=BD?= Date: Thu, 24 May 2018 22:59:06 +0200 Subject: [PATCH 06/98] [HttpFoundation] Fix cookie test with xdebug Here's the failure without this patch: ``` Testing Symfony\Component\HttpFoundation\Tests\ResponseFunctionalTest F..... 6 / 6 (100%) Time: 1.07 seconds, Memory: 4.00MB There was 1 failure: 1) Symfony\Component\HttpFoundation\Tests\ResponseFunctionalTest::testCookie with data set #0 ('cookie_max_age') Failed asserting that string matches format description. --- Expected +++ Actual @@ @@ Warning: Expiry date cannot have a year greater than 9999 in /home/gadelat/PhpstormProjects/symfony/src/Symfony/Component/HttpFoundation/Tests/Fixtures/response-functional/cookie_max_age.php on line 10 +Call Stack: + 0.0004 390392 1. {main}() /home/gadelat/PhpstormProjects/symfony/src/Symfony/Component/HttpFoundation/Tests/Fixtures/response-functional/cookie_max_age.php:0 + 0.0178 500960 2. setcookie() /home/gadelat/PhpstormProjects/symfony/src/Symfony/Component/HttpFoundation/Tests/Fixtures/response-functional/cookie_max_age.php:10 + + Array ( [0] => Content-Type: text/plain; charset=utf-8 [1] => Cache-Control: no-cache, private [2] => Date: Sat, 12 Nov 1955 20:04:00 GMT - [3] => Set-Cookie: foo=bar; expires=Sat, 01-Jan-10000 02:46:40 GMT; Max-Age=%d; path=/ + [3] => Set-Cookie: foo=bar; expires=Sat, 01-Jan-10000 02:46:40 GMT; Max-Age=251875115405; path=/ ) shutdown /home/gadelat/PhpstormProjects/symfony/src/Symfony/Component/HttpFoundation/Tests/ResponseFunctionalTest.php:49 ``` --- .../Tests/Fixtures/response-functional/common.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Symfony/Component/HttpFoundation/Tests/Fixtures/response-functional/common.inc b/src/Symfony/Component/HttpFoundation/Tests/Fixtures/response-functional/common.inc index ba101d357852d..f9c40a9a3c5e1 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/Fixtures/response-functional/common.inc +++ b/src/Symfony/Component/HttpFoundation/Tests/Fixtures/response-functional/common.inc @@ -22,6 +22,10 @@ error_reporting(-1); ini_set('html_errors', 0); ini_set('display_errors', 1); +if (ini_get('xdebug.default_enable')) { + xdebug_disable(); +} + header_remove('X-Powered-By'); header('Content-Type: text/plain; charset=utf-8'); From ef0b5004f80af699d8991498783f70cb80aa3e71 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 25 May 2018 14:02:41 +0200 Subject: [PATCH 07/98] updated CHANGELOG for 2.8.41 --- CHANGELOG-2.8.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG-2.8.md b/CHANGELOG-2.8.md index 9f76090b789b7..522a83664793c 100644 --- a/CHANGELOG-2.8.md +++ b/CHANGELOG-2.8.md @@ -7,6 +7,15 @@ in 2.8 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/v2.8.0...v2.8.1 +* 2.8.41 (2018-05-25) + + * bug #27359 [HttpFoundation] Fix perf issue during MimeTypeGuesser intialization (nicolas-grekas) + * security #cve-2018-11408 [SecurityBundle] Fail if security.http_utils cannot be configured + * security #cve-2018-11406 clear CSRF tokens when the user is logged out + * security #cve-2018-11385 Adding session authentication strategy to Guard to avoid session fixation + * security #cve-2018-11385 Adding session strategy to ALL listeners to avoid *any* possible fixation + * security #cve-2018-11386 [HttpFoundation] Break infinite loop in PdoSessionHandler when MySQL is in loose mode + * 2.8.40 (2018-05-21) * bug #26781 [Form] Fix precision of MoneyToLocalizedStringTransformer's divisions on transform() (syastrebov) From 786970f17d1a1c9c12bbf07ec0ac16c2cfd3360d Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 25 May 2018 14:02:50 +0200 Subject: [PATCH 08/98] updated VERSION for 2.8.41 --- 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 70038526fac48..d7ac3985b4457 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -59,12 +59,12 @@ abstract class Kernel implements KernelInterface, TerminableInterface protected $startTime; protected $loadClassCache; - const VERSION = '2.8.41-DEV'; + const VERSION = '2.8.41'; const VERSION_ID = 20841; const MAJOR_VERSION = 2; const MINOR_VERSION = 8; const RELEASE_VERSION = 41; - const EXTRA_VERSION = 'DEV'; + const EXTRA_VERSION = ''; const END_OF_MAINTENANCE = '11/2018'; const END_OF_LIFE = '11/2019'; From 37846d453a9ff12a2de1f46defb954a6bf14ac72 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 25 May 2018 14:30:40 +0200 Subject: [PATCH 09/98] bumped Symfony version to 2.8.42 --- 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 d7ac3985b4457..0e298381b9b7f 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -59,12 +59,12 @@ abstract class Kernel implements KernelInterface, TerminableInterface protected $startTime; protected $loadClassCache; - const VERSION = '2.8.41'; - const VERSION_ID = 20841; + const VERSION = '2.8.42-DEV'; + const VERSION_ID = 20842; const MAJOR_VERSION = 2; const MINOR_VERSION = 8; - const RELEASE_VERSION = 41; - const EXTRA_VERSION = ''; + const RELEASE_VERSION = 42; + const EXTRA_VERSION = 'DEV'; const END_OF_MAINTENANCE = '11/2018'; const END_OF_LIFE = '11/2019'; From 99327a6153fda78c36c9a61232cd061edcdb7f7e Mon Sep 17 00:00:00 2001 From: Samuel ROZE Date: Fri, 25 May 2018 13:03:43 +0100 Subject: [PATCH 10/98] [Github] Update the pull-request template --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 94f0fabcc4676..b6f39741d9dbc 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,6 @@ | Q | A | ------------- | --- -| Branch? | master for features / 2.7 up to 4.0 for bug fixes +| Branch? | master for features / 2.8 up to 4.1 for bug fixes | Bug fix? | yes/no | New feature? | yes/no | BC breaks? | no From 37e543329acee80edba3ead5e2ea53e42f2c8b5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Ostroluck=C3=BD?= Date: Thu, 24 May 2018 23:24:34 +0200 Subject: [PATCH 11/98] Default testsuite to latest PHPUnit 6.* Necessary to fix each() function deprecation calls introduced in PHP 7.2 --- phpunit | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpunit b/phpunit index c0ffe8ddef9e9..f4b80ed064121 100755 --- a/phpunit +++ b/phpunit @@ -8,7 +8,7 @@ if (!file_exists(__DIR__.'/vendor/symfony/phpunit-bridge/bin/simple-phpunit')) { exit(1); } if (\PHP_VERSION_ID >= 70000 && !getenv('SYMFONY_PHPUNIT_VERSION')) { - putenv('SYMFONY_PHPUNIT_VERSION=6.0'); + putenv('SYMFONY_PHPUNIT_VERSION=6.5'); } putenv('SYMFONY_PHPUNIT_DIR='.__DIR__.'/.phpunit'); require __DIR__.'/vendor/symfony/phpunit-bridge/bin/simple-phpunit'; From 0a4a0c0bc95dbbbea443c048dd6c605a723eb5e3 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 25 May 2018 15:16:19 +0200 Subject: [PATCH 12/98] updated CHANGELOG for 3.4.11 --- CHANGELOG-3.4.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG-3.4.md b/CHANGELOG-3.4.md index 4b307918d34b4..37f4a76efce85 100644 --- a/CHANGELOG-3.4.md +++ b/CHANGELOG-3.4.md @@ -7,6 +7,19 @@ in 3.4 minor versions. To get the diff for a specific change, go to https://github.com/symfony/symfony/commit/XXX where XXX is the change hash To get the diff between two versions, go to https://github.com/symfony/symfony/compare/v3.4.0...v3.4.1 +* 3.4.11 (2018-05-25) + + * bug #27364 [DI] Fix bad exception on uninitialized references to non-shared services (nicolas-grekas) + * bug #27359 [HttpFoundation] Fix perf issue during MimeTypeGuesser intialization (nicolas-grekas) + * security #cve-2018-11408 [SecurityBundle] Fail if security.http_utils cannot be configured + * security #cve-2018-11406 clear CSRF tokens when the user is logged out + * security #cve-2018-11385 migrating session for UsernamePasswordJsonAuthenticationListener + * security #cve-2018-11385 Adding session authentication strategy to Guard to avoid session fixation + * security #cve-2018-11385 Adding session strategy to ALL listeners to avoid *any* possible fixation + * security #cve-2018-11386 [HttpFoundation] Break infinite loop in PdoSessionHandler when MySQL is in loose mode + * bug #27341 [WebProfilerBundle] Fixed validator/dump trace CSS (yceruto) + * bug #27337 [FrameworkBundle] fix typo in CacheClearCommand (emilielorenzo) + * 3.4.10 (2018-05-21) * bug #27264 [Validator] Use strict type in URL validator (mimol91) From 136824a7491d2e41cc5fd1718184bdf61dddf80b Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 25 May 2018 15:16:28 +0200 Subject: [PATCH 13/98] updated VERSION for 3.4.11 --- 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 5e3b9a857827f..ca0f0b95c7a8c 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -67,12 +67,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl private $requestStackSize = 0; private $resetServices = false; - const VERSION = '3.4.11-DEV'; + const VERSION = '3.4.11'; const VERSION_ID = 30411; const MAJOR_VERSION = 3; const MINOR_VERSION = 4; const RELEASE_VERSION = 11; - const EXTRA_VERSION = 'DEV'; + const EXTRA_VERSION = ''; const END_OF_MAINTENANCE = '11/2020'; const END_OF_LIFE = '11/2021'; From f918da98194f08fca2c07f86f6ec1c8b76b7448a Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 25 May 2018 15:32:08 +0200 Subject: [PATCH 14/98] bumped Symfony version to 3.4.12 --- 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 ca0f0b95c7a8c..242016f7c0878 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -67,12 +67,12 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl private $requestStackSize = 0; private $resetServices = false; - const VERSION = '3.4.11'; - const VERSION_ID = 30411; + const VERSION = '3.4.12-DEV'; + const VERSION_ID = 30412; const MAJOR_VERSION = 3; const MINOR_VERSION = 4; - const RELEASE_VERSION = 11; - const EXTRA_VERSION = ''; + const RELEASE_VERSION = 12; + const EXTRA_VERSION = 'DEV'; const END_OF_MAINTENANCE = '11/2020'; const END_OF_LIFE = '11/2021'; From 3b4d7ab56c1e3816f226d10bca72fdabc7170150 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 24 May 2018 16:05:16 +0200 Subject: [PATCH 15/98] [DI] never inline lazy services --- .../Compiler/InlineServiceDefinitionsPass.php | 6 +- .../Tests/Dumper/PhpDumperTest.php | 16 +++- .../Tests/Fixtures/includes/classes.php | 6 +- .../Fixtures/php/services_non_shared_lazy.php | 74 +++++++++++++++++++ 4 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy.php diff --git a/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php b/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php index e84a49eb70a2e..d987f950d44d4 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/InlineServiceDefinitionsPass.php @@ -106,11 +106,15 @@ private function inlineArguments(ContainerBuilder $container, array $arguments, */ private function isInlineableDefinition(ContainerBuilder $container, $id, Definition $definition) { + if ($definition->isDeprecated() || $definition->isLazy() || $definition->isSynthetic()) { + return false; + } + if (!$definition->isShared() || ContainerInterface::SCOPE_PROTOTYPE === $definition->getScope(false)) { return true; } - if ($definition->isDeprecated() || $definition->isPublic() || $definition->isLazy()) { + if ($definition->isPublic()) { return false; } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php b/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php index d59106fc3a4cf..e341a233b1165 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php @@ -11,7 +11,6 @@ namespace Symfony\Component\DependencyInjection\Tests\Dumper; -use DummyProxyDumper; use PHPUnit\Framework\TestCase; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Dumper\PhpDumper; @@ -278,6 +277,19 @@ public function testInlinedDefinitionReferencingServiceContainer() $this->assertStringEqualsFile(self::$fixturesPath.'/php/services13.php', $dumper->dump(), '->dump() dumps inline definitions which reference service_container'); } + public function testNonSharedLazyDefinitionReferences() + { + $container = new ContainerBuilder(); + $container->register('foo', 'stdClass')->setShared(false)->setLazy(true); + $container->register('bar', 'stdClass')->addArgument(new Reference('foo', ContainerBuilder::EXCEPTION_ON_INVALID_REFERENCE, false)); + $container->compile(); + + $dumper = new PhpDumper($container); + $dumper->setProxyDumper(new \DummyProxyDumper()); + + $this->assertStringEqualsFile(self::$fixturesPath.'/php/services_non_shared_lazy.php', $dumper->dump()); + } + public function testInitializePropertiesBeforeMethodCalls() { require_once self::$fixturesPath.'/includes/classes.php'; @@ -343,7 +355,7 @@ public function testCircularReferenceAllowanceForInlinedDefinitionsForLazyServic $dumper = new PhpDumper($container); - $dumper->setProxyDumper(new DummyProxyDumper()); + $dumper->setProxyDumper(new \DummyProxyDumper()); $dumper->dump(); $this->addToAssertionCount(1); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php index 92db8f3c5ebfb..c805f7d721e66 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/classes.php @@ -84,16 +84,16 @@ class DummyProxyDumper implements ProxyDumper { public function isProxyCandidate(Definition $definition) { - return false; + return $definition->isLazy(); } public function getProxyFactoryCode(Definition $definition, $id) { - return ''; + return " // lazy factory\n\n"; } public function getProxyCode(Definition $definition) { - return ''; + return "// proxy code\n"; } } 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 new file mode 100644 index 0000000000000..f1f8e8409e6f3 --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services_non_shared_lazy.php @@ -0,0 +1,74 @@ +services = + $this->scopedServices = + $this->scopeStacks = array(); + $this->scopes = array(); + $this->scopeChildren = array(); + $this->methodMap = array( + 'bar' => 'getBarService', + 'foo' => 'getFooService', + ); + + $this->aliases = array(); + } + + /** + * {@inheritdoc} + */ + public function compile() + { + throw new LogicException('You cannot compile a dumped frozen container.'); + } + + /** + * {@inheritdoc} + */ + public function isFrozen() + { + return true; + } + + /** + * Gets the public 'bar' shared service. + * + * @return \stdClass + */ + protected function getBarService() + { + return $this->services['bar'] = new \stdClass($this->get('foo')); + } + + /** + * Gets the public 'foo' service. + * + * @return \stdClass + */ + public function getFooService($lazyLoad = true) + { + // lazy factory + + return new \stdClass(); + } +} + +// proxy code From 3de52144afd993438e7d82bea2a1f23cf71f73ca Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 25 May 2018 16:06:48 +0200 Subject: [PATCH 16/98] bumped Symfony version to 4.0.12 --- 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 09a288d6225ba..a2d61965b890d 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.0.11'; - const VERSION_ID = 40011; + const VERSION = '4.0.12-DEV'; + const VERSION_ID = 40012; const MAJOR_VERSION = 4; const MINOR_VERSION = 0; - const RELEASE_VERSION = 11; - const EXTRA_VERSION = ''; + const RELEASE_VERSION = 12; + const EXTRA_VERSION = 'DEV'; const END_OF_MAINTENANCE = '07/2018'; const END_OF_LIFE = '01/2019'; From 40e59a6415b1b03c77432eb9654a6f6ec09fe2f7 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Wed, 23 May 2018 15:49:17 +0200 Subject: [PATCH 17/98] Add code of Conduct links in our README --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 16a7e1b489c4d..b9fc51b3cf964 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ Community * [Join the Symfony Community][11] and meet other members at the [Symfony events][12]. * [Get Symfony support][13] on Stack Overflow, Slack, IRC, etc. * Follow us on [GitHub][14], [Twitter][15] and [Facebook][16]. +* Read our [Code of Conduct][24] and meet the [CARE Team][25] Contributing ------------ @@ -72,3 +73,5 @@ Symfony development is sponsored by [SensioLabs][21], led by the [21]: https://sensiolabs.com [22]: https://symfony.com/doc/current/contributing/code/core_team.html [23]: https://github.com/symfony/symfony-demo +[24]: https://symfony.com/coc +[25]: https://symfony.com/doc/current/contributing/code_of_conduct/care_team.html From b7feef00aec39baa2c2c7b2fe7ce054e3ccaa3d8 Mon Sep 17 00:00:00 2001 From: kiler129 Date: Tue, 22 May 2018 22:00:46 -0500 Subject: [PATCH 18/98] [HttpKernel] reset kernel start time on reboot --- src/Symfony/Component/HttpKernel/Kernel.php | 12 ++++-------- .../Component/HttpKernel/Tests/KernelTest.php | 19 +++++++++++++++++-- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index 5e3b9a857827f..9806e240f7965 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -87,18 +87,10 @@ public function __construct($environment, $debug) $this->debug = (bool) $debug; $this->rootDir = $this->getRootDir(); $this->name = $this->getName(); - - if ($this->debug) { - $this->startTime = microtime(true); - } } public function __clone() { - if ($this->debug) { - $this->startTime = microtime(true); - } - $this->booted = false; $this->container = null; $this->requestStackSize = 0; @@ -110,6 +102,10 @@ public function __clone() */ public function boot() { + if ($this->debug) { + $this->startTime = microtime(true); + } + if (true === $this->booted) { if (!$this->requestStackSize && $this->resetServices) { if ($this->container->has('services_resetter')) { diff --git a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php index a16ac37deebce..628be627fd4b4 100644 --- a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php @@ -901,6 +901,21 @@ public function testServicesResetter() $this->assertEquals(1, ResettableService::$counter); } + /** + * @group time-sensitive + */ + public function testKernelStartTimeIsResetWhileBootingAlreadyBootedKernel() + { + $kernel = $this->getKernelForTest(array('initializeBundles'), true); + $kernel->boot(); + $preReBoot = $kernel->getStartTime(); + + sleep(3600); //Intentionally large value to detect if ClockMock ever breaks + $kernel->boot(); + + $this->assertGreaterThan($preReBoot, $kernel->getStartTime()); + } + /** * Returns a mock for the BundleInterface. * @@ -970,10 +985,10 @@ protected function getKernel(array $methods = array(), array $bundles = array()) return $kernel; } - protected function getKernelForTest(array $methods = array()) + protected function getKernelForTest(array $methods = array(), $debug = false) { $kernel = $this->getMockBuilder('Symfony\Component\HttpKernel\Tests\Fixtures\KernelForTest') - ->setConstructorArgs(array('test', false)) + ->setConstructorArgs(array('test', $debug)) ->setMethods($methods) ->getMock(); $p = new \ReflectionProperty($kernel, 'rootDir'); From 9de5014b27feef6dc245b631b03911ca17fa40f3 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 25 May 2018 17:06:28 +0200 Subject: [PATCH 19/98] [HttpKernel] Dont reset start time when not needed --- src/Symfony/Component/HttpKernel/Kernel.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php index 143006e4b1e7a..948c30a49544a 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -102,20 +102,22 @@ public function __clone() */ public function boot() { - if ($this->debug) { - $this->startTime = microtime(true); - } - if (true === $this->booted) { if (!$this->requestStackSize && $this->resetServices) { if ($this->container->has('services_resetter')) { $this->container->get('services_resetter')->reset(); } $this->resetServices = false; + if ($this->debug) { + $this->startTime = microtime(true); + } } return; } + if ($this->debug) { + $this->startTime = microtime(true); + } if ($this->debug && !isset($_ENV['SHELL_VERBOSITY']) && !isset($_SERVER['SHELL_VERBOSITY'])) { putenv('SHELL_VERBOSITY=3'); $_ENV['SHELL_VERBOSITY'] = 3; From 6fc7fdb182834a68987ca3fbea14abb1f4b972d6 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 25 May 2018 17:22:00 +0200 Subject: [PATCH 20/98] [HttpKernel] fix test --- src/Symfony/Component/HttpKernel/Tests/KernelTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php index 628be627fd4b4..7cde2ac5e2ef9 100644 --- a/src/Symfony/Component/HttpKernel/Tests/KernelTest.php +++ b/src/Symfony/Component/HttpKernel/Tests/KernelTest.php @@ -911,7 +911,7 @@ public function testKernelStartTimeIsResetWhileBootingAlreadyBootedKernel() $preReBoot = $kernel->getStartTime(); sleep(3600); //Intentionally large value to detect if ClockMock ever breaks - $kernel->boot(); + $kernel->reboot(null); $this->assertGreaterThan($preReBoot, $kernel->getStartTime()); } From ca314889e7fb7a8b5c1f58ca489b9a22b7e71293 Mon Sep 17 00:00:00 2001 From: Maxime Steinhausser Date: Sat, 26 May 2018 11:34:32 +0200 Subject: [PATCH 21/98] [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 22/98] 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 23/98] [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 24/98] [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 25/98] [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 26/98] 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 27/98] 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 28/98] 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 29/98] 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 c09ca94a284817b2876f2e5b2d7ead002dd925a1 Mon Sep 17 00:00:00 2001 From: DonCallisto Date: Wed, 30 May 2018 11:57:41 +0200 Subject: [PATCH 30/98] 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 31/98] [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 146e01cb4442fbcb3b05dd8ae2569d9894374044 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 1 Jun 2018 14:37:16 +0200 Subject: [PATCH 32/98] [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 33/98] 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 af0699012ae02accb11b4b3a8d5b3fee477ceb46 Mon Sep 17 00:00:00 2001 From: Aleksey Prilipko Date: Sun, 20 May 2018 12:18:30 +1000 Subject: [PATCH 34/98] 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 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 35/98] 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 36/98] 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 37/98] 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 7f9780b5dfaf2df83990a4e95af9f4191f8ff50a Mon Sep 17 00:00:00 2001 From: Pascal Montoya Date: Wed, 6 Jun 2018 10:34:52 +0200 Subject: [PATCH 38/98] 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 39/98] 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 40/98] 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 41/98] [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 42/98] 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 43/98] 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 9786ec8e193942287b94b0888e669a2ffa4c58f1 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Fri, 8 Jun 2018 11:29:49 +0200 Subject: [PATCH 44/98] [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 45/98] [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 322f58b334105e09330809e91e9b09e27b7c1e99 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sat, 9 Jun 2018 21:00:10 +0200 Subject: [PATCH 46/98] [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 47/98] [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 1f346f446d462e5d0b79bf0642ed4b89621a1684 Mon Sep 17 00:00:00 2001 From: Webnet team Date: Mon, 21 May 2018 12:07:14 +0200 Subject: [PATCH 48/98] [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 49/98] 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 50/98] 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 51/98] 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 52/98] 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 53/98] [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 14bbcdb4965b4cc0d0d1e78b363e82e2a25514e6 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Mon, 11 Jun 2018 15:18:57 +0200 Subject: [PATCH 54/98] 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 55/98] [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 2c0ac93e259c061a9e0b59003424ae28f0ec33e9 Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Mon, 11 Jun 2018 18:23:43 -0400 Subject: [PATCH 56/98] 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 39dd9b2f9793571df6d4e46fbdc5ceef482ffbe0 Mon Sep 17 00:00:00 2001 From: Sepehr Lajevardi Date: Thu, 14 Jun 2018 11:11:11 +0430 Subject: [PATCH 57/98] [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 58/98] [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 59/98] [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 60/98] 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: Thu, 14 Jun 2018 03:19:59 +0300 Subject: [PATCH 61/98] [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 62/98] [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 63/98] 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 64/98] 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 0bc53d66c0c09fb5b7536e1ceb02b5baceaa3936 Mon Sep 17 00:00:00 2001 From: Gautier Deuette Date: Mon, 18 Jun 2018 14:21:59 +0200 Subject: [PATCH 65/98] [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 66/98] [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 67/98] [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 68/98] [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 69/98] 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 70/98] 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 71/98] 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 72/98] [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 73/98] [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 74/98] 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 75/98] [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 b7ccf10de7f6964d57c184c97e03a1200569ccec Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 20 Jun 2018 11:38:25 +0200 Subject: [PATCH 76/98] [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 77/98] 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 78/98] [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 7adb641d7cdd64a96a8ac72d71eae4f74679ea74 Mon Sep 17 00:00:00 2001 From: fritzmg Date: Thu, 21 Jun 2018 11:24:14 +0200 Subject: [PATCH 79/98] 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 80/98] 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 81/98] [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 82/98] [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 83/98] [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 84/98] [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 85/98] 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 86/98] [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 87/98] [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 88/98] [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 d1f41601f4c209d124849cd1263d46e3b25f08e8 Mon Sep 17 00:00:00 2001 From: "Alexander M. Turek" Date: Fri, 22 Jun 2018 17:01:26 +0200 Subject: [PATCH 89/98] 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 b58eb0117fb7f016b8b225573b095a4b5b911818 Mon Sep 17 00:00:00 2001 From: Roland Franssen Date: Sat, 23 Jun 2018 14:49:00 +0200 Subject: [PATCH 90/98] [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 91/98] [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 92/98] [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 93/98] [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 140b6c210155413d6a95f1464107b2a365069afa Mon Sep 17 00:00:00 2001 From: Felix Nagel Date: Tue, 5 Jun 2018 09:42:58 +0200 Subject: [PATCH 94/98] 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 95/98] [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 96/98] [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 91a8af4fe622d27b1e057fbac8bd78e9f8b43248 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 25 Jun 2018 15:02:02 +0200 Subject: [PATCH 97/98] updated CHANGELOG for 4.0.12 --- CHANGELOG-4.0.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/CHANGELOG-4.0.md b/CHANGELOG-4.0.md index 7131036ba4fa8..72d24bf39e62d 100644 --- a/CHANGELOG-4.0.md +++ b/CHANGELOG-4.0.md @@ -7,6 +7,46 @@ in 4.0 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.0.0...v4.0.1 +* 4.0.12 (2018-06-25) + + * bug #27626 [TwigBundle][DX] Only add the Twig WebLinkExtension if the WebLink component is enabled (thewilkybarkid) + * bug #27701 [SecurityBundle] Dont throw if "security.http_utils" is not found (nicolas-grekas) + * bug #27690 [DI] Resolve env placeholder in logs (ro0NL) + * bug #26534 allow_extra_attributes does not throw an exception as documented (deviantintegral) + * 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 #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 #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 #27581 Fix bad method call with guard authentication + session migration (weaverryan) + * bug #27576 [Cache] Fix expiry comparisons in array-based pools (nicolas-grekas) + * 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 #27326 [Serializer] deserialize from xml: Fix a collection that contains the only one element (webnet-fr) + * 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 #27318 [Cache] memcache connect should not add duplicate entries on sequential calls (Aleksey Prilipko) + * 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) + * bug #27344 [HttpKernel] reset kernel start time on reboot (kiler129) + * bug #27365 [Serializer] Check the value of enable_max_depth if defined (dunglas) + * bug #27358 [PhpUnitBridge] silence some stderr outputs (ostrolucky) + * bug #27366 [DI] never inline lazy services (nicolas-grekas) + * 4.0.11 (2018-05-25) * bug #27364 [DI] Fix bad exception on uninitialized references to non-shared services (nicolas-grekas) From 8984efc1ac95de59bc66853e3c0a26ed25cc9ec9 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 25 Jun 2018 15:02:08 +0200 Subject: [PATCH 98/98] updated VERSION for 4.0.12 --- 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 385ba0e26969a..4c009f9e06ffe 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.0.12-DEV'; + const VERSION = '4.0.12'; const VERSION_ID = 40012; const MAJOR_VERSION = 4; const MINOR_VERSION = 0; const RELEASE_VERSION = 12; - const EXTRA_VERSION = 'DEV'; + const EXTRA_VERSION = ''; const END_OF_MAINTENANCE = '07/2018'; const END_OF_LIFE = '01/2019';