Bug->Req #70845 [Opn]: ip2long should not fail with number starting with zero
Edit report at https://bugs.php.net/bug.php?id=70845&edit=1
ID: 70845
Updated by: cmb@php.net
Reported by: raffaellobertini at gmail dot com
-Summary: ip2long fails with number starting with zero
+Summary: ip2long should not fail with number starting with
zero
Status: Open
-Type: Bug
+Type: Feature/Change Request
Package: Network related
Operating System: centos6.5
PHP Version: 5.4.45
Block user comment: N
Private report: N
New Comment:
I can confirm the behavior, see <https://3v4l.org/tr4B3>.
ip2long() is defined in ext/standard/basic_functions.c[1].
However, it appears to me the "culprit" is inet_addr() and/or
inet_pton() to which PHP delegates without much further
processing. I don't know about inet_pton(), but indeed inet_addr()
interprets fields with a leading zero as octal integers[2], so in
this case it fails. As this behavior is documented[3] and makes
sense, I'm changing this ticket to feature request.
Changing the behavior of ip2long() would be possible, but that
would obviously cause a BC break, and as such likely would require
the RFC process[4].
[1] <https://github.com/php/php-src/blob/php-7.0.8/ext/standard/basic_functions.c#L3938-L3974>
[2] <http://publibn.boulder.ibm.com/doc_link/en_US/a_doc_lib/libs/commtrf2/inet_addr.htm>
[3] <http://php.net/manual/en/function.ip2long.php>
[4] <https://wiki.php.net/rfc/howto>
Previous Comments:
------------------------------------------------------------------------
[2015-12-19 01:48:55] ajf@php.net
This is merely speculation, but I think it may be interpreting '096' as octal due to the
leading zero. '9' is not a valid octal digit, so in that case, it would be an invalid IP
address.
------------------------------------------------------------------------
[2015-11-03 16:28:15] raffaellobertini at gmail dot com
Description:
------------
just run ip2long('195.194.213.096') it will return false instead of
interpreting the string as '195,194.213.96'
if you point me to the code i fix myself. I mean, the function is not robust.
cannot crash for a number that is '096' that it will be 96 as integer.
Test script:
---------------
ip2long('195.194.213.096') === ip2long('195,194.213.96')
//anyway the code to convert into packed format is quite easy, but It is not nice that I cannot rely
on php built in function....
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=70845&edit=1
Thread (6 messages)