ID: 38197
User updated by: gk at gknw dot de
Reported By: gk at gknw dot de
Status: Bogus
Bug Type: Network related
Operating System: all
PHP Version: 5.1.4
New Comment:
sorry, but I cant follow: if I pass in a string "0xffffffff" what
should convert it to float? perhaps Z_STRVAL_PP()? Ok, if so then
please forgive - I couldnt find Z_STRVAL_PP() documented.
The reason why I need this function is that a couple of routers and
switches represent IPs mixed bewteen the hex and the dotted format -
and in the past 10 years I used the nice feature that inet_addr() can
deal with both dotted and hex formated IPs from C, Perl, and PHP.
Also it wouldnt be support for 'invalid IP addresses' but just for the
_one_ special case which fails with dotted format too.
Previous Comments:
------------------------------------------------------------------------
[2006-07-25 12:55:57] [EMAIL PROTECTED]
Your patch won't work as 0xffffffff is not a string, but float.
Also, I don't really see why do you need the function in this case -
just (int)0xffffffff is enough.
And I don't think we're going to support invalid IP addresses in a
function which is supposed to accept IP addresses.
------------------------------------------------------------------------
[2006-07-25 12:46:06] gk at gknw dot de
I agree that 0xffffffff is not an IP address and the underlying
inet_addr() function doesn't think it's valid - but it doesnt think
it's valid with 255.255.255.255 either, and to capture that there was
code introduced with PHP 5.x.
With only _two_ additional lines of code we could again get the same
behaviour as with PHP 4.x:
=====================================================
--- basic_functions.c.orig Sun Aug 21 20:36:34 2005
+++ basic_functions.c Tue Jul 25 11:15:32 2006
@@ -1265,7 +1265,9 @@
/* the only special case when we should return -1 ourselves,
* because inet_addr() considers it wrong.
*/
- if (!memcmp(Z_STRVAL_PP(str), "255.255.255.255",
Z_STRLEN_PP(str)))
{
+ if (!memcmp(Z_STRVAL_PP(str), "255.255.255.255",
Z_STRLEN_PP(str))
||
+ !memcmp(Z_STRVAL_PP(str), "0xffffffff",
Z_STRLEN_PP(str)) ||
+ !memcmp(Z_STRVAL_PP(str), "0xFFFFFFFF",
Z_STRLEN_PP(str)) ) {
RETURN_LONG(-1);
}
=====================================================
here's a PHP 5.0.5 running with the patch:
http://194.242.35.162/tstphp/t_ip2long.php
and you can see now again same behaviour as with PHP 4.x:
http://www.gknw.de/test/php_issues/t_ip2long.php
patch for download here:
http://www.gknw.net/test/php_issues/basic_functions.c.diff
Guenter.
------------------------------------------------------------------------
[2006-07-25 07:04:40] [EMAIL PROTECTED]
0xffffffff is not an IP address and the underlying inet_addr() function
doesn't think it's valid too.
------------------------------------------------------------------------
[2006-07-24 19:08:23] gk at gknw dot de
Description:
------------
Although ip2long() works fine with 255.255.255.255 it fails when
0xffffffff is passed in.
Other hex values work fine.
Seems this was introduced with PHP 5.x - PHP 4.x is not affected; there
it works as I expect.
Reproduce code:
---------------
Nonworking sample on PHP 5.x:
http://www.gknw.net/test/php_issues/t_ip2long.php
Working same sample on PHP 4.x:
http://www.gknw.de/test/php_issues/t_ip2long.php
Script for download:
http://www.gknw.net/test/php_issues/t_ip2long_php.txt
Expected result:
----------------
Same result on PHP5 as with PHP4.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=38197&edit=1