Merge pull request #4024 from Icinga/fix/numbers-in-filter-conditions-3974

Numbers in filter conditions not interpreted correctly
This commit is contained in:
Johannes Meyer 2019-12-09 09:49:56 +01:00 committed by GitHub
commit cf36b1f848
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 0 deletions

View File

@ -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);
}