From 69400820ceda770eb06c35a4e082b0e918accff2 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 4 Dec 2019 12:12:45 +0100 Subject: [PATCH] prevent notice for invalid octal numbers on PHP 7.4 --- src/Symfony/Component/Yaml/Inline.php | 14 ++++++++++---- src/Symfony/Component/Yaml/Tests/InlineTest.php | 10 ++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/Yaml/Inline.php b/src/Symfony/Component/Yaml/Inline.php index 4c7d37428e474..341482746ec57 100644 --- a/src/Symfony/Component/Yaml/Inline.php +++ b/src/Symfony/Component/Yaml/Inline.php @@ -759,15 +759,21 @@ private static function evaluateScalar($scalar, $flags, $references = []) switch (true) { case ctype_digit($scalar): - $raw = $scalar; + if ('0' === $scalar[0]) { + return octdec(preg_replace('/[^0-7]/', '', $scalar)); + } + $cast = (int) $scalar; - return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw); + return ($scalar === (string) $cast) ? $cast : $scalar; case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)): - $raw = $scalar; + if ('0' === $scalar[1]) { + return -octdec(preg_replace('/[^0-7]/', '', substr($scalar, 1))); + } + $cast = (int) $scalar; - return '0' == $scalar[1] ? -octdec(substr($scalar, 1)) : (($raw === (string) $cast) ? $cast : $raw); + return ($scalar === (string) $cast) ? $cast : $scalar; case is_numeric($scalar): case Parser::preg_match(self::getHexRegex(), $scalar): $scalar = str_replace('_', '', $scalar); diff --git a/src/Symfony/Component/Yaml/Tests/InlineTest.php b/src/Symfony/Component/Yaml/Tests/InlineTest.php index b28d472b334b6..bedcfaf66bbb7 100644 --- a/src/Symfony/Component/Yaml/Tests/InlineTest.php +++ b/src/Symfony/Component/Yaml/Tests/InlineTest.php @@ -842,4 +842,14 @@ public function phpConstTagWithEmptyValueProvider() [['' => 'foo', 'bar' => 'ccc'], '{!php/const : foo, bar: ccc}'], ]; } + + public function testParseInvalidPositiveOctalNumber() + { + self::assertSame(342391, Inline::parse('0123456789')); + } + + public function testParseInvalidNegativeOctalNumber() + { + self::assertSame(-342391, Inline::parse('-0123456789')); + } }