From e6d9819adb41dc75b7a64855c892ec06206d6f26 Mon Sep 17 00:00:00 2001 From: Johannes Meyer Date: Mon, 9 Dec 2019 09:39:50 +0100 Subject: [PATCH] FilterQueryString: Parse numbers as floats in range conditions --- library/Icinga/Data/Filter/FilterQueryString.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/library/Icinga/Data/Filter/FilterQueryString.php b/library/Icinga/Data/Filter/FilterQueryString.php index 2a36f7837..06b2b24f0 100644 --- a/library/Icinga/Data/Filter/FilterQueryString.php +++ b/library/Icinga/Data/Filter/FilterQueryString.php @@ -77,6 +77,11 @@ class FilterQueryString } $var = substr($key, $pos + 1); $key = substr($key, 0, $pos); + + if (ctype_digit($var)) { + $var = (float) $var; + } + return Filter::expression($key, $sign, $var); } } @@ -89,20 +94,26 @@ class FilterQueryString return Filter::expression($key, '=', true); } + $toFloat = false; if ($sign === '=') { $last = substr($key, -1); if ($last === '>' || $last === '<') { $sign = $last . $sign; $key = substr($key, 0, -1); + $toFloat = true; } // TODO: Same as above for unescaped <> - do we really need this? } elseif ($sign === '>' || $sign === '<' || $sign === '!') { + $toFloat = $sign === '>' || $sign === '<'; if ($this->nextChar() === '=') { $sign .= $this->readChar(); } } $var = $this->readNextValue(); + if ($toFloat && ctype_digit($var)) { + $var = (float) $var; + } return Filter::expression($key, $sign, $var); }