Skip to content

Commit c286a10

Browse files
Merge branch '4.3' into 4.4
* 4.3: gracefully handle missing event dispatchers [Cache] fix memory leak when using PhpArrayAdapter fix parsing negative octal numbers [SecurityBundle] Properly escape regex in AddSessionDomainConstraintPass [Config] never try loading failed classes twice with ClassExistenceResource
2 parents 76de473 + 2375571 commit c286a10

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

Inline.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -617,11 +617,11 @@ private static function evaluateScalar(string $scalar, int $flags, array $refere
617617
// Optimize for returning strings.
618618
// no break
619619
case '+' === $scalar[0] || '-' === $scalar[0] || '.' === $scalar[0] || is_numeric($scalar[0]):
620+
if (Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar)) {
621+
$scalar = str_replace('_', '', (string) $scalar);
622+
}
623+
620624
switch (true) {
621-
case Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar):
622-
$scalar = str_replace('_', '', (string) $scalar);
623-
// omitting the break / return as integers are handled in the next case
624-
// no break
625625
case ctype_digit($scalar):
626626
$raw = $scalar;
627627
$cast = (int) $scalar;
@@ -631,7 +631,7 @@ private static function evaluateScalar(string $scalar, int $flags, array $refere
631631
$raw = $scalar;
632632
$cast = (int) $scalar;
633633

634-
return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw === (string) $cast) ? $cast : $raw);
634+
return '0' == $scalar[1] ? -octdec(substr($scalar, 1)) : (($raw === (string) $cast) ? $cast : $raw);
635635
case is_numeric($scalar):
636636
case Parser::preg_match(self::getHexRegex(), $scalar):
637637
$scalar = str_replace('_', '', $scalar);

Tests/InlineTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -720,4 +720,20 @@ public function testUnfinishedInlineMap()
720720
$this->expectExceptionMessage("Unexpected end of line, expected one of \",}\n\" at line 1 (near \"{abc: 'def'\").");
721721
Inline::parse("{abc: 'def'");
722722
}
723+
724+
/**
725+
* @dataProvider getTestsForOctalNumbers
726+
*/
727+
public function testParseOctalNumbers($expected, $yaml)
728+
{
729+
self::assertSame($expected, Inline::parse($yaml));
730+
}
731+
732+
public function getTestsForOctalNumbers()
733+
{
734+
return [
735+
'positive octal number' => [28, '034'],
736+
'negative octal number' => [-28, '-034'],
737+
];
738+
}
723739
}

0 commit comments

Comments
 (0)