[3.x] Fix twig_compare w.r.t. whitespace trimming

This commit is contained in:
Guilliam Xavier
2020-06-12 18:00:16 +02:00
committed by Fabien Potencier
parent 83d6a120ff
commit 9d115f6831
2 changed files with 20 additions and 16 deletions
+16 -16
View File
@@ -944,25 +944,25 @@ function twig_compare($a, $b)
{
// int <=> string
if (\is_int($a) && \is_string($b)) {
$b = trim($b);
if (!is_numeric($b)) {
$bTrim = trim($b, " \t\n\r\v\f");
if (!is_numeric($bTrim)) {
return (string) $a <=> $b;
}
if ((int) $b == $b) {
return $a <=> (int) $b;
if ((int) $bTrim == $bTrim) {
return $a <=> (int) $bTrim;
} else {
return (float) $a <=> (float) $b;
return (float) $a <=> (float) $bTrim;
}
}
if (\is_string($a) && \is_int($b)) {
$a = trim($a);
if (!is_numeric($a)) {
$aTrim = trim($a, " \t\n\r\v\f");
if (!is_numeric($aTrim)) {
return $a <=> (string) $b;
}
if ((int) $a == $a) {
return (int) $a <=> $b;
if ((int) $aTrim == $aTrim) {
return (int) $aTrim <=> $b;
} else {
return (float) $a <=> (float) $b;
return (float) $aTrim <=> (float) $b;
}
}
@@ -971,23 +971,23 @@ function twig_compare($a, $b)
if (is_nan($a)) {
return 1;
}
$b = trim($b);
if (!is_numeric($b)) {
$bTrim = trim($b, " \t\n\r\v\f");
if (!is_numeric($bTrim)) {
return (string) $a <=> $b;
}
return $a <=> (float) $b;
return $a <=> (float) $bTrim;
}
if (\is_string($a) && \is_float($b)) {
if (is_nan($b)) {
return 1;
}
$a = trim($a);
if (!is_numeric($a)) {
$aTrim = trim($a, " \t\n\r\v\f");
if (!is_numeric($aTrim)) {
return $a <=> (string) $b;
}
return (float) $a <=> $b;
return (float) $aTrim <=> $b;
}
// fallback to <=>
+4
View File
@@ -320,6 +320,10 @@ class CoreTest extends TestCase
[-1, 10, 20],
[-1, '10', 20],
[-1, 10, '20'],
[1, 42, ' foo'],
[0, 42, "42\f"],
[1, 42, "\x00\x34\x32"],
];
}
}