diff --git a/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerTrait.php b/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerTrait.php index 7a64ed0d91..2bc6de0705 100644 --- a/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerTrait.php +++ b/src/Symfony/Bridge/PhpUnit/Legacy/CoverageListenerTrait.php @@ -69,10 +69,19 @@ class CoverageListenerTrait $r = new \ReflectionProperty(Test::class, 'annotationCache'); $r->setAccessible(true); + $covers = $sutFqcn; + if (!\is_array($sutFqcn)) { + $covers = [$sutFqcn]; + while ($parent = get_parent_class($sutFqcn)) { + $covers[] = $parent; + $sutFqcn = $parent; + } + } + $cache = $r->getValue(); $cache = array_replace_recursive($cache, [ \get_class($test) => [ - 'covers' => \is_array($sutFqcn) ? $sutFqcn : [$sutFqcn], + 'covers' => $covers, ], ]); $r->setValue(Test::class, $cache); diff --git a/src/Symfony/Component/Yaml/Inline.php b/src/Symfony/Component/Yaml/Inline.php index 0a99b0ba77..7fd40d9531 100644 --- a/src/Symfony/Component/Yaml/Inline.php +++ b/src/Symfony/Component/Yaml/Inline.php @@ -636,15 +636,21 @@ class Inline 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 24c1b8a5de..a433ff01a9 100644 --- a/src/Symfony/Component/Yaml/Tests/InlineTest.php +++ b/src/Symfony/Component/Yaml/Tests/InlineTest.php @@ -781,6 +781,16 @@ class InlineTest extends TestCase ]; } + public function testParsePositiveOctalNumberContainingInvalidDigits() + { + self::assertSame(342391, Inline::parse('0123456789')); + } + + public function testParseNegativeOctalNumberContainingInvalidDigits() + { + self::assertSame(-342391, Inline::parse('-0123456789')); + } + /** * @dataProvider unquotedExclamationMarkThrowsProvider */