From 92bc19fd0cb1cfa11ece9ecbb49426037db3c595 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..0c6d509381fed 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 testParsePositiveOctalNumberContainingInvalidDigits() + { + self::assertSame(342391, Inline::parse('0123456789')); + } + + public function testParseNegativeOctalNumberContainingInvalidDigits() + { + self::assertSame(-342391, Inline::parse('-0123456789')); + } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy