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

Reply via email to