]> granicus.if.org Git - php/commitdiff
Fixed bug #71144 (Sementation fault when using cURL with ZTS)
authorXinchen Hui <laruence@gmail.com>
Fri, 18 Dec 2015 16:29:19 +0000 (00:29 +0800)
committerXinchen Hui <laruence@gmail.com>
Fri, 18 Dec 2015 16:29:19 +0000 (00:29 +0800)
NEWS
ext/curl/interface.c
ext/curl/tests/bug71144.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index a82de3b92777ef172d9e9d22c27b92e2289cba2f..131777052dd339c37e6d339a2b66d20007021cfd 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -20,6 +20,10 @@ PHP                                                                        NEWS
     (Nikita)
   . Fixed bug #52355 (Negating zero does not produce negative zero). (Andrea)
 
+. CURL:
+  . Fixed bug #71144 (Sementation fault when using cURL with ZTS).
+    (Michael Maroszek, Laruence)
+
 - DBA:
   . Fixed key leak with invalid resource. (Laruence)
 
index f12a9e24926679d0268ae5583eec8d8ded6ec69a..7dd04a6d15f5bbdb75b3907df72e31c342d9ed09 100644 (file)
@@ -1851,7 +1851,9 @@ static void _php_curl_set_default_options(php_curl *ch)
        curl_easy_setopt(ch->cp, CURLOPT_INFILE,            (void *) ch);
        curl_easy_setopt(ch->cp, CURLOPT_HEADERFUNCTION,    curl_write_header);
        curl_easy_setopt(ch->cp, CURLOPT_WRITEHEADER,       (void *) ch);
+#if !defined(ZTS)
        curl_easy_setopt(ch->cp, CURLOPT_DNS_USE_GLOBAL_CACHE, 1);
+#endif
        curl_easy_setopt(ch->cp, CURLOPT_DNS_CACHE_TIMEOUT, 120);
        curl_easy_setopt(ch->cp, CURLOPT_MAXREDIRS, 20); /* prevent infinite redirects */
 
@@ -2183,6 +2185,12 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{
                                        return 1;
                        }
 #endif
+# if defined(ZTS)
+                       if (option == CURLOPT_DNS_USE_GLOBAL_CACHE) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "CURLOPT_DNS_USE_GLOBAL_CACHE cannot be activated when thread safety is enabled");
+                               return 1;
+                       }
+# endif
                        error = curl_easy_setopt(ch->cp, option, lval);
                        break;
                case CURLOPT_SAFE_UPLOAD:
diff --git a/ext/curl/tests/bug71144.phpt b/ext/curl/tests/bug71144.phpt
new file mode 100644 (file)
index 0000000..059cd63
--- /dev/null
@@ -0,0 +1,13 @@
+--TEST--
+Bug #71144 (Sementation fault when using cURL with ZTS)
+--SKIPIF--
+<?php include 'skipif.inc'; ?>
+<?php if (!PHP_ZTS) { print "skip only for zts build"; } ?>
+--FILE--
+<?php
+$ch = curl_init();
+var_dump(curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, 1));
+?>
+--EXPECTF--
+Warning: curl_setopt(): CURLOPT_DNS_USE_GLOBAL_CACHE cannot be activated when thread safety is enabled in %sbug71144.php on line %d
+bool(false)