#47752 [Com]: FILTER_VALIDATE_INT doesn't allow +0 and -0
ID: 47752 Comment by: php at lvp-media dot com Reported By: for-bugs at hnw dot jp Status: Open Bug Type: Filter related Operating System: * PHP Version: 5.2.9 New Comment: Probably the easiest fix for this would be to change line 88 of logical_filters.c to allow the character 0 as well, seeing values like -0012 and 0012 get returned as false now as well. Con of this is quite obvious as well however, as numbers prefixed by 0 often get interpreted as octal numbers. A better fix would be to add a check for it; --- logical_filters.bak 2009-03-24 12:43:23.0 +0100 +++ logical_filters.c2009-03-24 12:45:09.0 +0100 @@ -84,6 +84,12 @@ break; } + /* allow +0 and -0 */ + if ((str + 1) == end *str == '0') { + *ret = 0; + return 1; + } + /* must start with 1..9*/ if (str end *str = '1' *str = '9') { ctx_value = ((*(str++)) - '0'); Previous Comments: [2009-03-23 05:40:58] for-bugs at hnw dot jp Description: FILTER_VALIDATE_INT doesn't allow +0 and -0, while 0, +1, and -1 is valid. Reproduce code: --- ?php var_dump(intval(+0)); var_dump(filter_var(+0, FILTER_VALIDATE_INT)); var_dump(intval(-0)); var_dump(filter_var(-0, FILTER_VALIDATE_INT)); Expected result: int(0) int(0) int(0) int(0) Actual result: -- int(0) bool(false) int(0) bool(false) -- Edit this bug report at http://bugs.php.net/?id=47752edit=1
#47752 [Com]: FILTER_VALIDATE_INT doesn't allow +0 and -0
ID: 47752 Comment by: php at lvp-media dot com Reported By: for-bugs at hnw dot jp Status: Open Bug Type: Filter related Operating System: * PHP Version: 5.2.9 New Comment: False, this only allows +0 and -0 by checking the lenght of the string, it verifies that the null is the only character in it. Previous Comments: [2009-03-24 11:49:06] der...@php.net Right, so this patch is not correct as it would allow octal numbers. [2009-03-24 11:46:57] php at lvp-media dot com Probably the easiest fix for this would be to change line 88 of logical_filters.c to allow the character 0 as well, seeing values like -0012 and 0012 get returned as false now as well. Con of this is quite obvious as well however, as numbers prefixed by 0 often get interpreted as octal numbers. A better fix would be to add a check for it; --- logical_filters.bak 2009-03-24 12:43:23.0 +0100 +++ logical_filters.c2009-03-24 12:45:09.0 +0100 @@ -84,6 +84,12 @@ break; } + /* allow +0 and -0 */ + if ((str + 1) == end *str == '0') { + *ret = 0; + return 1; + } + /* must start with 1..9*/ if (str end *str = '1' *str = '9') { ctx_value = ((*(str++)) - '0'); [2009-03-23 05:40:58] for-bugs at hnw dot jp Description: FILTER_VALIDATE_INT doesn't allow +0 and -0, while 0, +1, and -1 is valid. Reproduce code: --- ?php var_dump(intval(+0)); var_dump(filter_var(+0, FILTER_VALIDATE_INT)); var_dump(intval(-0)); var_dump(filter_var(-0, FILTER_VALIDATE_INT)); Expected result: int(0) int(0) int(0) int(0) Actual result: -- int(0) bool(false) int(0) bool(false) -- Edit this bug report at http://bugs.php.net/?id=47752edit=1
#47752 [Com]: FILTER_VALIDATE_INT doesn't allow +0 and -0
ID: 47752 Comment by: peter at lvp-media dot com Reported By: for-bugs at hnw dot jp Status: Feedback Bug Type: Filter related Operating System: * PHP Version: 5.2.9 Assigned To: pajoye New Comment: Hereby a simple bug47752.phpt file. Tested it on a patched- an an unpatched installation, results as expected. Strictly speaking +0 and -0 are valid integers, even though neither of them is positive or negative. Peter Beverloo --TEST-- Bug #47752 (FILTER_VALIDATE_INT doesn't allow +0 and -0) --FILE-- ?php $positive = filter_var ('+0', FILTER_VALIDATE_INT); $negative = filter_var ('-0', FILTER_VALIDATE_INT); $zero = filter_var ('0', FILTER_VALIDATE_INT); $octal= filter_var ('-0123', FILTER_VALIDATE_INT); var_dump ($positive); var_dump ($negative); var_dump ($zero); var_dump ($octal); ? --EXPECT-- int(0) int(0) int(0) bool(false) Previous Comments: [2009-03-24 12:44:19] paj...@php.net As far as I remember it is on purpose. 0 cannot be negative or positive. But if we agree on allowing them again, no problem here. Can you please provide tests as well (phpt)? [2009-03-24 11:50:38] php at lvp-media dot com False, this only allows +0 and -0 by checking the lenght of the string, it verifies that the null is the only character in it. [2009-03-24 11:49:06] der...@php.net Right, so this patch is not correct as it would allow octal numbers. [2009-03-24 11:46:57] php at lvp-media dot com Probably the easiest fix for this would be to change line 88 of logical_filters.c to allow the character 0 as well, seeing values like -0012 and 0012 get returned as false now as well. Con of this is quite obvious as well however, as numbers prefixed by 0 often get interpreted as octal numbers. A better fix would be to add a check for it; --- logical_filters.bak 2009-03-24 12:43:23.0 +0100 +++ logical_filters.c2009-03-24 12:45:09.0 +0100 @@ -84,6 +84,12 @@ break; } + /* allow +0 and -0 */ + if ((str + 1) == end *str == '0') { + *ret = 0; + return 1; + } + /* must start with 1..9*/ if (str end *str = '1' *str = '9') { ctx_value = ((*(str++)) - '0'); [2009-03-23 05:40:58] for-bugs at hnw dot jp Description: FILTER_VALIDATE_INT doesn't allow +0 and -0, while 0, +1, and -1 is valid. Reproduce code: --- ?php var_dump(intval(+0)); var_dump(filter_var(+0, FILTER_VALIDATE_INT)); var_dump(intval(-0)); var_dump(filter_var(-0, FILTER_VALIDATE_INT)); Expected result: int(0) int(0) int(0) int(0) Actual result: -- int(0) bool(false) int(0) bool(false) -- Edit this bug report at http://bugs.php.net/?id=47752edit=1