From 5fdfab743d964bb13602effc9efcd6f747e2f58c Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 5 Feb 2016 19:49:26 +0800 Subject: [PATCH] Fixed bug #71523 (Copied handle with new option CURLOPT_HTTPHEADER crashes while curl_multi_exec) --- NEWS | 4 ++++ ext/curl/interface.c | 7 ++++++- ext/curl/tests/bug71523.phpt | 28 ++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 ext/curl/tests/bug71523.phpt diff --git a/NEWS b/NEWS index f3ebebae4d..0fc0565798 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2016, PHP 5.6.19 +- CURL: + . Fixed bug #71523 (Copied handle with new option CURLOPT_HTTPHEADER crashes + while curl_multi_exec). (Laruence) + - Date: . Fixed bug #68078 (Datetime comparisons ignore microseconds). (Willem-Jan Zijderveld) diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 267afecd8b..d9aab7541c 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2543,7 +2543,12 @@ static int _php_curl_setopt(php_curl *ch, long option, zval **zvalue TSRMLS_DC) return 1; } } - zend_hash_index_update(ch->to_free->slist, (ulong) option, &slist, sizeof(struct curl_slist *), NULL); + + if (Z_REFCOUNT_P(ch->clone) <= 1) { + zend_hash_index_update(ch->to_free->slist, (ulong) option, &slist, sizeof(struct curl_slist *), NULL); + } else { + zend_hash_next_index_insert(ch->to_free->slist, &slist, sizeof(struct curl_slist *), NULL); + } error = curl_easy_setopt(ch->cp, option, slist); diff --git a/ext/curl/tests/bug71523.phpt b/ext/curl/tests/bug71523.phpt new file mode 100644 index 0000000000..06647de12d --- /dev/null +++ b/ext/curl/tests/bug71523.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #71523 (Copied handle with new option CURLOPT_HTTPHEADER crashes while curl_multi_exec) +--SKIPIF-- + +--FILE-- + +okey +--EXPECTF-- +okey -- 2.40.0