Doc #74417 [Com]: long2ip() is documented to accept a string, but TypeError thrown with strings
| From: | vedad at kajtaz dot net | Date: | Fri, 21 Apr 2017 14:58:02 +0000 |
| Subject: | Doc #74417 [Com]: long2ip() is documented to accept a string, but TypeError thrown with strings | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-14652@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=74417&edit=1
ID: 74417
Comment by: vedad at kajtaz dot net
Reported by: vedad at kajtaz dot net
Summary: long2ip() is documented to accept a string, but
TypeError thrown with strings
Status: Open
Type: Documentation Problem
Package: Documentation problem
Operating System: FreeBSD 11.0
PHP Version: 7.1.3
Block user comment: N
Private report: N
New Comment:
Note that the original bug report is based on a 64bit FreeBSD build.
Previous Comments:
------------------------------------------------------------------------
[2017-04-21 08:18:01] indan at nul dot nu
The problem is that IP addresses in the high range (e.g. "192.168.0.1") result in a
positive number which does not fit in an INT32_MAX. I don't see how this can be solved without
added unsigned support to PHP, so I think the commit changing the argument from a string to an
integer should be reverted.
Test code:
<?php
declare(strict_types=0);
error_reporting(E_ALL);
$n = (int)"3232242954"; // Will be truncated to INT32_MAX
echo "192.168.29.10 = " . gettype($n) . " = $n\n";
echo "Test 1: '" . long2ip($n) . "'\n";
echo "Test 2: '" . long2ip("3232242954") . "'\n";
echo "Test 3: '" . long2ip("173632452") . "'\n";
/*
Result:
192.168.29.10 = integer = 2147483647
Test 1: '127.255.255.255'
PHP Warning: long2ip() expects parameter 1 to be integer, string given in t.php on line 7
Warning: long2ip() expects parameter 1 to be integer, string given in t.php on line 7
Test 2: ''
Test 3: '10.89.107.196'
*/
------------------------------------------------------------------------
[2017-04-20 14:32:53] indan at nul dot nu
Same problem with a 32-bit version of PHP 7.1.4 on Windows.
The 64-bit version of PHP 7.1.4 on Linux does not have this problem, so maybe it is only a bug in
the 32-bit version of PHP.
Probably introduced by commit:
http://git.php.net/?p=php-src.git;a=commit;h=9b148d31d3e19ce8c726ebbab3ba6a9a24979a2f
As far as I know, I don't have strict types enabled.
------------------------------------------------------------------------
[2017-04-11 16:20:50] vedad at kajtaz dot net
Description:
------------
The long2ip() signature in documentation is:
string long2ip ( string $proper_address )
Yet, as of PHP 7.1 (unlike PHP 7.0) TypeError is thrown with strict_types=1 when a string is
provided:
PHP Fatal error: Uncaught TypeError: long2ip() expects parameter 1 to be integer, string given in
...
Related bug reports: #65017 and #71100
Test script:
---------------
declare(strict_types=1);
long2ip('2130706433');
Actual result:
--------------
PHP Fatal error: Uncaught TypeError: long2ip() expects parameter 1 to be integer, string given in
...
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=74417&edit=1