ext/filter/tests/046.phpt fails, does not detect int overflow (with -O2 gcc 4.4)
| Bug #51023 | ext/filter/tests/046.phpt fails, does not detect int overflow (with -O2 gcc 4.4) | ||||
|---|---|---|---|---|---|
| Submitted: | 2010-02-11 23:31 UTC | Modified: | 2010-03-06 19:56 UTC | ||
| From: | geissert at debian dot org | Assigned: | geissert (profile) | ||
| Status: | Closed | Package: | Filter related | ||
| PHP Version: | 5.3SVN-2010-02-12 | OS: | * | ||
| Private report: | No | CVE-ID: | None | ||
[2010-02-11 23:31 UTC] geissert at debian dot org
Description:
------------
The filter fails to detect an integer overflow and passes the FILTER_VALIDATE_INT test. The problem is caused because php_filter_parse_int uses a long to detect the overflow, which of course doesn't have the same size of an integer.
This can be fixed by making ctx_value an integer in both php_filter_parse_int and php_filter_int (and for correctness, not setting Z_TYPE_P(value) to IS_LONG).
Reproduce code:
---------------
// the current test:
$s = sprintf("%d", PHP_INT_MAX);
var_dump(is_long(filter_var($s, FILTER_VALIDATE_INT)));
$s = sprintf("%.0f", PHP_INT_MAX+1);
var_dump(filter_var($s, FILTER_VALIDATE_INT));
$s = sprintf("%d", -PHP_INT_MAX);
var_dump(is_long(filter_var($s, FILTER_VALIDATE_INT)));
Expected result:
----------------
bool(true)
bool(false)
bool(true)
Actual result:
--------------
bool(true)
int(-2147483648)
bool(true)
Patches
Pull Requests
History
AllCommentsChangesGit/SVN commits
[2010-02-20 20:56 UTC] geissert@php.net
[2010-02-25 21:53 UTC] seanius at debian dot org
[2010-03-06 19:56 UTC] geissert@php.net