From f90c706a9ab17409b888e37cbb666358fdf13795 Mon Sep 17 00:00:00 2001 From: Ilia Alshanetsky Date: Mon, 5 Oct 2009 14:45:54 +0000 Subject: [PATCH] Fixed bug #49757 (long2ip() can return wrong value in a multi-threaded applications). # original patch by Florian Anderiasch --- ext/standard/basic_functions.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 955c030635..a0b999c7b2 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -3923,6 +3923,9 @@ PHP_FUNCTION(long2ip) 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 @@ PHP_FUNCTION(long2ip) 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 } /* }}} */ -- 2.50.1