iliaa Tue Apr 28 22:27:00 2009 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/standard basic_functions.c
/php-src/ext/standard/tests/network ip2long_variation1.phpt
Log:
Fixed bug #47365 (ip2long() may allow some invalid values on certain 64bit
systems)
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.725.2.31.2.64.2.88&r2=1.725.2.31.2.64.2.89&diff_format=u
Index: php-src/ext/standard/basic_functions.c
diff -u php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.88
php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.89
--- php-src/ext/standard/basic_functions.c:1.725.2.31.2.64.2.88 Mon Apr 27
12:52:31 2009
+++ php-src/ext/standard/basic_functions.c Tue Apr 28 22:26:59 2009
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.725.2.31.2.64.2.88 2009/04/27 12:52:31 felipe
Exp $ */
+/* $Id: basic_functions.c,v 1.725.2.31.2.64.2.89 2009/04/28 22:26:59 iliaa Exp
$ */
#include "php.h"
#include "php_streams.h"
@@ -3897,12 +3897,22 @@
{
char *addr;
int addr_len;
+#ifdef HAVE_INET_PTON
+ struct in_addr ip;
+#else
unsigned long int ip;
+#endif
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &addr,
&addr_len) == FAILURE) {
return;
}
+#ifdef HAVE_INET_PTON
+ if (addr_len == 0 || inet_pton(AF_INET, addr, &ip) != 1) {
+ RETURN_FALSE;
+ }
+ RETURN_LONG(ntohl(ip.s_addr));
+#else
if (addr_len == 0 || (ip = inet_addr(addr)) == INADDR_NONE) {
/* The only special case when we should return -1 ourselves,
* because inet_addr() considers it wrong. We return 0xFFFFFFFF
and
@@ -3915,6 +3925,7 @@
RETURN_FALSE;
}
RETURN_LONG(ntohl(ip));
+#endif
}
/* }}} */
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/network/ip2long_variation1.phpt?r1=1.1.2.1&r2=1.1.2.2&diff_format=u
Index: php-src/ext/standard/tests/network/ip2long_variation1.phpt
diff -u php-src/ext/standard/tests/network/ip2long_variation1.phpt:1.1.2.1
php-src/ext/standard/tests/network/ip2long_variation1.phpt:1.1.2.2
--- php-src/ext/standard/tests/network/ip2long_variation1.phpt:1.1.2.1 Fri Jan
23 15:34:18 2009
+++ php-src/ext/standard/tests/network/ip2long_variation1.phpt Tue Apr 28
22:27:00 2009
@@ -114,19 +114,19 @@
*** Testing ip2long() : usage variation ***
--int 0--
-int(0)
+bool(false)
--int 1--
-int(1)
+bool(false)
--int 12345--
-int(12345)
+bool(false)
--int -12345--
bool(false)
--float 10.5--
-int(167772165)
+bool(false)
--float -10.5--
bool(false)
@@ -138,7 +138,7 @@
bool(false)
--float .5--
-int(5)
+bool(false)
--empty array--
Error: 2 - ip2long() expects parameter 1 to be string, array given, %s(%d)
@@ -163,13 +163,13 @@
bool(false)
--lowercase true--
-int(1)
+bool(false)
--lowercase false--
bool(false)
--uppercase TRUE--
-int(1)
+bool(false)
--uppercase FALSE--
bool(false)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php