From 231c505a474210c4a80c6d58651e05cbc5566bbb Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 18 Dec 2019 17:27:44 +0100 Subject: [PATCH] [DI] allow "." and "-" in env processor lines --- .../DependencyInjection/FrameworkExtension.php | 2 +- .../ParameterBag/EnvPlaceholderParameterBag.php | 4 ++-- .../Tests/ParameterBag/EnvPlaceholderParameterBagTest.php | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index ebbc502dbd..aabd77c551 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1360,7 +1360,7 @@ class FrameworkExtension extends Extension } if ($config['decryption_env_var']) { - if (!preg_match('/^(?:\w*+:)*+\w++$/', $config['decryption_env_var'])) { + if (!preg_match('/^(?:[-.\w]*+:)*+\w++$/', $config['decryption_env_var'])) { throw new InvalidArgumentException(sprintf('Invalid value "%s" set as "decryption_env_var": only "word" characters are allowed.', $config['decryption_env_var'])); } diff --git a/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php b/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php index ec95d4c1b4..defedbbd28 100644 --- a/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php +++ b/src/Symfony/Component/DependencyInjection/ParameterBag/EnvPlaceholderParameterBag.php @@ -44,7 +44,7 @@ class EnvPlaceholderParameterBag extends ParameterBag return $placeholder; // return first result } } - if (!preg_match('/^(?:\w*+:)*+\w++$/', $env)) { + if (!preg_match('/^(?:[-.\w]*+:)*+\w++$/', $env)) { throw new InvalidArgumentException(sprintf('Invalid %s name: only "word" characters are allowed.', $name)); } if ($this->has($name) && null !== ($defaultValue = parent::get($name)) && !\is_string($defaultValue)) { @@ -52,7 +52,7 @@ class EnvPlaceholderParameterBag extends ParameterBag } $uniqueName = md5($name.'_'.self::$counter++); - $placeholder = sprintf('%s_%s_%s', $this->getEnvPlaceholderUniquePrefix(), str_replace(':', '_', $env), $uniqueName); + $placeholder = sprintf('%s_%s_%s', $this->getEnvPlaceholderUniquePrefix(), strtr($env, ':-.', '___'), $uniqueName); $this->envPlaceholders[$env][$placeholder] = $placeholder; return $placeholder; diff --git a/src/Symfony/Component/DependencyInjection/Tests/ParameterBag/EnvPlaceholderParameterBagTest.php b/src/Symfony/Component/DependencyInjection/Tests/ParameterBag/EnvPlaceholderParameterBagTest.php index 0e61dba035..ea6e3814af 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/ParameterBag/EnvPlaceholderParameterBagTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/ParameterBag/EnvPlaceholderParameterBagTest.php @@ -187,4 +187,11 @@ class EnvPlaceholderParameterBagTest extends TestCase $bag->resolve(); $this->assertNotNull($bag->get('env(default::BAR)')); } + + public function testExtraCharsInProcessor() + { + $bag = new EnvPlaceholderParameterBag(); + $bag->resolve(); + $this->assertStringMatchesFormat('env_%s_key_a_b_c_FOO_%s', $bag->get('env(key:a.b-c:FOO)')); + } }