iliaa Tue Apr 28 22:27:26 2009 UTC Modified files: /php-src/ext/standard basic_functions.c /php-src/ext/standard/tests/network ip2long_variation1.phpt Log: MFB: 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.954&r2=1.955&diff_format=u Index: php-src/ext/standard/basic_functions.c diff -u php-src/ext/standard/basic_functions.c:1.954 php-src/ext/standard/basic_functions.c:1.955 --- php-src/ext/standard/basic_functions.c:1.954 Mon Apr 27 12:50:00 2009 +++ php-src/ext/standard/basic_functions.c Tue Apr 28 22:27:26 2009 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: basic_functions.c,v 1.954 2009/04/27 12:50:00 felipe Exp $ */ +/* $Id: basic_functions.c,v 1.955 2009/04/28 22:27:26 iliaa Exp $ */ #include "php.h" #include "php_streams.h" @@ -3877,12 +3877,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 @@ -3895,6 +3905,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.2&r2=1.3&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.2 php-src/ext/standard/tests/network/ip2long_variation1.phpt:1.3 --- php-src/ext/standard/tests/network/ip2long_variation1.phpt:1.2 Fri Jan 23 15:34:22 2009 +++ php-src/ext/standard/tests/network/ip2long_variation1.phpt Tue Apr 28 22:27:26 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 binary 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