diff --git a/src/Symfony/Component/Yaml/Inline.php b/src/Symfony/Component/Yaml/Inline.php index 94d3a5cd299b0..5e4e5f7a877bc 100644 --- a/src/Symfony/Component/Yaml/Inline.php +++ b/src/Symfony/Component/Yaml/Inline.php @@ -355,11 +355,18 @@ private static function parseSequence(string $sequence, int $flags, int &$i = 0, ++$i; // [foo, bar, ...] + $lastToken = null; while ($i < $len) { if (']' === $sequence[$i]) { return $output; } if (',' === $sequence[$i] || ' ' === $sequence[$i]) { + if (',' === $sequence[$i] && (null === $lastToken || 'separator' === $lastToken)) { + $output[] = null; + } elseif (',' === $sequence[$i]) { + $lastToken = 'separator'; + } + ++$i; continue; @@ -403,6 +410,7 @@ private static function parseSequence(string $sequence, int $flags, int &$i = 0, $output[] = $value; + $lastToken = 'value'; ++$i; } diff --git a/src/Symfony/Component/Yaml/Tests/InlineTest.php b/src/Symfony/Component/Yaml/Tests/InlineTest.php index 4e8d324a1f809..c4e1eb1b8721d 100644 --- a/src/Symfony/Component/Yaml/Tests/InlineTest.php +++ b/src/Symfony/Component/Yaml/Tests/InlineTest.php @@ -1004,4 +1004,11 @@ public function testParseQuotedReferenceLikeStringsInSequence() $this->assertSame(['&foo', '&bar', '&baz'], Inline::parse($yaml)); } + + public function testParseSequenceWithEmptyElement() + { + $this->assertSame(['foo', null, 'bar'], Inline::parse('[foo, , bar]')); + $this->assertSame([null, 'foo', 'bar'], Inline::parse('[, foo, bar]')); + $this->assertSame(['foo', 'bar'], Inline::parse('[foo, bar, ]')); + } }