Piwik_Common::sanitizeInputValues (and by extension getRequestVar) treats values like "1%6" or "3ab4" as integers
|Reported by:||mgc8||Owned by:|
|Component:||Core||Keywords:||sanitizeInputValues, getRequestVar, sanitize, int, string|
The following type of comparison in sanitizeInputValues() is used to ascertain if a string value is actually a string:
if(is_int($value) || $value==(int)$value) $ok = true;
However, the following comparisons are true at least in PHP 5.2.10:
"1%6" == 1
"3ab4" == 3
Apparently the typecasting engine always returns the first "number" part of the string, regardless of the rest; if the first character is not a number, the return will be 0.
I suggest the following modification to solve the issue:
if(is_int($value) || (string)$value==(string)((int)$value)) $ok = true;
This will assure that the comparisons will not be made between a string and an integer directly, thus avoiding the bug.