ID: 3062 Updated by: [EMAIL PROTECTED] Reported By: anderson at metrolink dot com -Status: Open +Status: Wont Fix Bug Type: Misbehaving function Operating System: FreeBSD PHP Version: 3.0.12 New Comment:
We are sorry, but we can not support PHP 3 related problems anymore. Momentum is gathering for PHP 5, and we think supporting PHP 3 will lead to a waste of resources which we want to put into getting PHP 5 ready. Of course PHP 4 will continue to be supported for the forseeable future. Previous Comments: ------------------------------------------------------------------------ [1999-12-31 05:34:22] anderson at metrolink dot com I also noticed that PHPAPI void convert_to_long_base(pval *op, int base) uses strtol() instead of strtoul(), which also contributes to my difficulty. $ip=0xffffffff doesn't equal -1, but $ip=~0 does. Perhaps I'm just trying to do something that isn't supposed to work, but the results are clertainly not intuitive. ------------------------------------------------------------------------ [1999-12-28 21:40:25] anderson at metrolink dot com The function dechex() can be passed a negative number, which will create a negative index into a static array. This was discoverd when trying to manipulate IP addresses represented by integers. Any IP that has a first octet >127 will cause this to happen. Since integers are signed, I wonder what other areas might have a similar problem when trying to manipulate IP addresses in this way. Simple Example: print(dechex(-333333)); This fix seems to correct this instance of the problem, but I fear that there could possibly be undesirable side effect of doing this. *** php-3.0.12/functions/math.c Thu Apr 22 09:19:50 1999 --- php/functions/math.c Tue Dec 28 21:16:08 1999 *************** *** 424,430 **** static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz"; char *result, *ptr, *ret; int len, digit; ! long value; if (arg->type != IS_LONG || base < 2 || base > 36) { return empty_string; --- 424,430 ---- static char digits[] = "0123456789abcdefghijklmnopqrstuvwxyz"; char *result, *ptr, *ret; int len, digit; ! unsigned long value; if (arg->type != IS_LONG || base < 2 || base > 36) { return empty_string; ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=3062&edit=1