Closed
Description
Symfony version(s) affected: 4.1.7 (actually all versions)
Description
Suppose we have an implementation of Symfony\Component\Config\Definition\ConfigurationInterface
. If we define beforeNormalization
part for some node definition and call thenUnset
as a result of if part, the application will crash with Symfony\Component\Config\Definition\Exception\UnsetKeyException
.
How to reproduce
<?php
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Processor;
require_once 'vendor/autoload.php';
$configuration = new class implements ConfigurationInterface {
public function getConfigTreeBuilder()
{
$builder = new TreeBuilder();
$root = $builder->root('root');
$root
->children()
->scalarNode('value')
->beforeNormalization()
->ifEmpty()
->thenUnset()
->end()
->end();
return $builder;
}
};
$config = (new Processor())->processConfiguration($configuration, [['value' => null]]);
The output:
Fatal error: Uncaught Symfony\Component\Config\Definition\Exception\UnsetKeyException: Unsetting key in vendor/symfony/symfony/src/Symfony/Component/Config/Definition/Builder/ExprBuilder.php on line 203
Symfony\Component\Config\Definition\Exception\UnsetKeyException: Unsetting key in vendor/symfony/symfony/src/Symfony/Component/Config/Definition/Builder/ExprBuilder.php on line 203
Call Stack:
0.0002 402960 1. {main}() reproduce.php:0
0.0022 715928 2. Symfony\Component\Config\Definition\Processor->processConfiguration() reproduce.php:27
0.0053 1086056 3. Symfony\Component\Config\Definition\Processor->process() vendor/symfony/symfony/src/Symfony/Component/Config/Definition/Processor.php:52
0.0053 1086056 4. Symfony\Component\Config\Definition\ArrayNode->normalize() vendor/symfony/symfony/src/Symfony/Component/Config/Definition/Processor.php:35
0.0053 1086432 5. Symfony\Component\Config\Definition\ArrayNode->normalizeValue() vendor/symfony/symfony/src/Symfony/Component/Config/Definition/BaseNode.php:363
0.0053 1086432 6. Symfony\Component\Config\Definition\ScalarNode->normalize() vendor/symfony/symfony/src/Symfony/Component/Config/Definition/ArrayNode.php:295
0.0053 1086432 7. Symfony\Component\Config\Definition\Builder\ExprBuilder::Symfony\Component\Config\Definition\Builder\{closure}() vendor/symfony/symfony/src/Symfony/Component/Config/Definition/BaseNode.php:335
0.0053 1086432 8. Symfony\Component\Config\Definition\Builder\ExprBuilder->Symfony\Component\Config\Definition\Builder\{closure}() vendor/symfony/symfony/src/Symfony/Component/Config/Definition/Builder/ExprBuilder.php:241