ID: 40115 User updated by: jannisbreitwieser at web dot de Reported By: jannisbreitwieser at web dot de -Status: Bogus +Status: Closed Bug Type: Strings related Operating System: Linux 2.6 PHP Version: 5.2.0 New Comment:
just wanted to mention that this problem ist NOT fixed in the dev versions of php 4.x and 6.x Previous Comments: ------------------------------------------------------------------------ [2007-01-15 10:35:27] jannisbreitwieser at web dot de @php_lists at realplain dot com: Thank you for the first elaborate attempt to answer my problem. I did not try 5.2.1 yet afaik 5.2.0 is the current offical version. @tony: I don´t know which version you are using. This report is for version 5.2.0 on linux where the problem definitely still occurs: [EMAIL PROTECTED]:~$ php -v PHP 5.2.0 (cli) (built: Jan 01 2007 15:28:45) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies [EMAIL PROTECTED]:~$ cat test.php <? var_dump((string) -2147483648 > (string) 1); //bool(true) var_dump((int) -2147483648 > (int) 1); //bool(false) ?> [EMAIL PROTECTED]:~$ php test.php bool(true) bool(false) ------------------------------------------------------------------------ [2007-01-15 09:41:22] [EMAIL PROTECTED] var_dump((string) -2147483648 > (string) 1); //bool(false) var_dump((int) -2147483648 > (int) 1); //bool(false) what are you talking about? ------------------------------------------------------------------------ [2007-01-15 04:39:34] php_lists at realplain dot com Tony and Ilia, yes this IS from integer overflow but it's a bug in zendi_smart_strcmp(). Ilia, remember I sent the patch to fix this just a couple weeks ago? ;-) See v1.208.2.4.2.18 of zend_operators.c: http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_operators.c?r1=1.208.2.4.2.17&r2=1.208.2.4.2.18&view=patch The same bug was fixed with non-string integers over 6 years ago, in v1.90. To the bug reporter, have you tried PHP 5.2.1RC2? I think you'll find these things work as expected there. :-) BTW, on your "WTF?" var_dump(), that's a float because the number is parsed on its own in scripts (without the "-"), and then negated in another operation. As a string however, it's all converted at once so it's still an integer. If that helps explain things there... ------------------------------------------------------------------------ [2007-01-13 17:56:17] jannisbreitwieser at web dot de Hi again. I´m not sure if you dont understand me or if I don´t understand you. To quote the manual: http://www.php.net/manual/en/language.operators.comparison.php "If you compare an integer with a string, the string is converted to a number. If you compare two numerical strings, they are compared as integers." The comparison table on the same page says for string comparison: "Translate strings and resources to numbers, usual math" This implies to me that the comparison: " -2147483648>1:" has got the same result for integers and string. (string) -2147483648 > (string) 1 --> true (int) -2147483648 > (int) 1 --> false Please try to explain to me why this is not the case. Either there is a bug in the documentation or there is a bug in the implementation. But obviously implementation and documentation do not match. ------------------------------------------------------------------------ [2007-01-13 15:32:11] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php This is due to integer overflow. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/40115 -- Edit this bug report at http://bugs.php.net/?id=40115&edit=1