iliaa                                    Mon, 05 Oct 2009 14:45:54 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=289216

Log:
Fixed bug #49757 (long2ip() can return wrong value in a multi-threaded 
applications).
# original patch by Florian Anderiasch

Bug: http://bugs.php.net/49757 (Open) long2ip can return wrong value in a 
multi-threaded application
      
Changed paths:
    U   php/php-src/branches/PHP_5_2/NEWS
    U   php/php-src/branches/PHP_5_2/ext/standard/basic_functions.c
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/standard/basic_functions.c
    U   php/php-src/trunk/ext/standard/basic_functions.c

Modified: php/php-src/branches/PHP_5_2/NEWS
===================================================================
--- php/php-src/branches/PHP_5_2/NEWS   2009-10-05 14:15:15 UTC (rev 289215)
+++ php/php-src/branches/PHP_5_2/NEWS   2009-10-05 14:45:54 UTC (rev 289216)
@@ -5,6 +5,8 @@
   (Rasmus)
 - Fixed a open_basedir bypass in posix_mkfifo() identified by Grzegorz
   Stachowiak.  (Rasmus)
+- Fixed bug #49757 (long2ip() can return wrong value in a multi-threaded
+  applications). (Ilia, Florian Anderiasch)
 - Fixed bug #49698 (Unexpected change in strnatcasecmp()). (Rasmus)
 - Fixed bug #49647 (DOMUserData does not exist). (Rob)
 - Fixed bug #49630 (imap_listscan function missing). (Felipe)

Modified: php/php-src/branches/PHP_5_2/ext/standard/basic_functions.c
===================================================================
--- php/php-src/branches/PHP_5_2/ext/standard/basic_functions.c 2009-10-05 
14:15:15 UTC (rev 289215)
+++ php/php-src/branches/PHP_5_2/ext/standard/basic_functions.c 2009-10-05 
14:45:54 UTC (rev 289216)
@@ -4375,6 +4375,9 @@
        int ip_len;
        unsigned long n;
        struct in_addr myaddr;
+#ifdef HAVE_INET_PTON
+       char str[40];
+#endif

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ip, &ip_len) 
== FAILURE) {
                return;
@@ -4383,7 +4386,15 @@
        n = strtoul(ip, NULL, 0);

        myaddr.s_addr = htonl(n);
+#ifdef HAVE_INET_PTON
+       if (inet_ntop(AF_INET, &myaddr, str, sizeof(str))) {
+               RETURN_STRING(str, 1);
+       } else {
+               RETURN_FALSE;
+       }
+#else
        RETURN_STRING(inet_ntoa(myaddr), 1);
+#endif
 }
 /* }}} */


Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2009-10-05 14:15:15 UTC (rev 289215)
+++ php/php-src/branches/PHP_5_3/NEWS   2009-10-05 14:45:54 UTC (rev 289216)
@@ -13,6 +13,8 @@
 - Fixed a open_basedir bypass in posix_mkfifo() identified by Grzegorz
   Stachowiak.  (Rasmus)

+- Fixed bug #49757 (long2ip() can return wrong value in a multi-threaded
+  applications). (Ilia, Florian Anderiasch)
 - Fixed bug #49732 (crashes when using fileinfo when timestamp conversion
   fails). (Pierre)
 - Fixed bug #49698 (Unexpected change in strnatcasecmp()). (Rasmus)

Modified: php/php-src/branches/PHP_5_3/ext/standard/basic_functions.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/standard/basic_functions.c 2009-10-05 
14:15:15 UTC (rev 289215)
+++ php/php-src/branches/PHP_5_3/ext/standard/basic_functions.c 2009-10-05 
14:45:54 UTC (rev 289216)
@@ -3932,6 +3932,9 @@
        int ip_len;
        unsigned long n;
        struct in_addr myaddr;
+#ifdef HAVE_INET_PTON
+       char str[40];
+#endif

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ip, &ip_len) 
== FAILURE) {
                return;
@@ -3940,7 +3943,15 @@
        n = strtoul(ip, NULL, 0);

        myaddr.s_addr = htonl(n);
+#ifdef HAVE_INET_PTON
+       if (inet_ntop(AF_INET, &myaddr, str, sizeof(str))) {
+               RETURN_STRING(str, 1);
+       } else {
+               RETURN_FALSE;
+       }
+#else
        RETURN_STRING(inet_ntoa(myaddr), 1);
+#endif
 }
 /* }}} */


Modified: php/php-src/trunk/ext/standard/basic_functions.c
===================================================================
--- php/php-src/trunk/ext/standard/basic_functions.c    2009-10-05 14:15:15 UTC 
(rev 289215)
+++ php/php-src/trunk/ext/standard/basic_functions.c    2009-10-05 14:45:54 UTC 
(rev 289216)
@@ -3923,6 +3923,9 @@
        int ip_len;
        unsigned long n;
        struct in_addr myaddr;
+#ifdef HAVE_INET_PTON
+       char str[40];
+#endif

        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ip, &ip_len) 
== FAILURE) {
                return;
@@ -3931,7 +3934,15 @@
        n = strtoul(ip, NULL, 0);

        myaddr.s_addr = htonl(n);
+#ifdef HAVE_INET_PTON
+       if (inet_ntop(AF_INET, &myaddr, str, sizeof(str))) {
+               RETURN_RT_STRING(str, ZSTR_DUPLICATE);
+       } else {
+               RETURN_FALSE;
+       }
+#else
        RETURN_RT_STRING(inet_ntoa(myaddr), ZSTR_DUPLICATE);
+#endif
 }
 /* }}} */


-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to