diff --git a/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php b/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php index 7202cd7a98..9231cf48c5 100644 --- a/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php +++ b/src/Symfony/Component/DependencyInjection/EnvVarProcessor.php @@ -236,7 +236,7 @@ class EnvVarProcessor implements EnvVarProcessorInterface } if ('csv' === $prefix) { - return str_getcsv($env); + return str_getcsv($env, ',', '"', \PHP_VERSION_ID >= 70400 ? '' : '\\'); } if ('trim' === $prefix) { diff --git a/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php b/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php index b8bc6da05c..c960c2f1ad 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/EnvVarProcessorTest.php @@ -478,4 +478,37 @@ class EnvVarProcessorTest extends TestCase $this->assertEquals('foo', $result); } + + /** + * @dataProvider validCsv + */ + public function testGetEnvCsv($value, $processed) + { + $processor = new EnvVarProcessor(new Container()); + + $result = $processor->getEnv('csv', 'foo', function ($name) use ($value) { + $this->assertSame('foo', $name); + + return $value; + }); + + $this->assertSame($processed, $result); + } + + public function validCsv() + { + $complex = <<<'CSV' +,"""","foo""","\""",\,foo\ +CSV; + + return [ + ['', [null]], + [',', ['', '']], + ['1', ['1']], + ['1,2," 3 "', ['1', '2', ' 3 ']], + ['\\,\\\\', ['\\', '\\\\']], + [$complex, \PHP_VERSION_ID >= 70400 ? ['', '"', 'foo"', '\\"', '\\', 'foo\\'] : ['', '"', 'foo"', '\\"",\\,foo\\']], + [null, null], + ]; + } }