diff --git a/src/Extension/CoreExtension.php b/src/Extension/CoreExtension.php index bbb55596b64..00389589ab1 100644 --- a/src/Extension/CoreExtension.php +++ b/src/Extension/CoreExtension.php @@ -971,16 +971,18 @@ function twig_compare($a, $b) if (is_nan($a)) { return 1; } + $b = trim($b); if (!is_numeric($b)) { return (string) $a <=> $b; } - return (float) $a <=> $b; + return $a <=> (float) $b; } - if (\is_float($b) && \is_string($a)) { + if (\is_string($a) && \is_float($b)) { if (is_nan($b)) { return 1; } + $a = trim($a); if (!is_numeric($a)) { return $a <=> (string) $b; } diff --git a/tests/Extension/CoreTest.php b/tests/Extension/CoreTest.php index 61cf31c8168..91cced5b357 100644 --- a/tests/Extension/CoreTest.php +++ b/tests/Extension/CoreTest.php @@ -306,6 +306,12 @@ public function provideCompareCases() [-1, 42, 'abc42'], [-1, 0, 'abc42'], + [0, 42.0, ' 42.0'], + [0, 42.0, '42.0 '], + [-1, 42.0, '42.0abc'], + [-1, 42.0, 'abc42.0'], + [-1, 0.0, 'abc42.0'], + [0, INF, 'INF'], [0, -INF, '-INF'], [0, INF, '1e1000'],