diff options
| author | Jakub Zelenka <bukka@php.net> | 2016-02-29 19:31:20 +0000 |
|---|---|---|
| committer | Jakub Zelenka <bukka@php.net> | 2016-02-29 19:31:20 +0000 |
| commit | 70141093a731049ee9220e9e965f61ded56ed4d5 (patch) | |
| tree | 6e67b382253a186889bfdc37c31062d6fb9880d9 /ext/curl | |
| parent | e453af3851daf08f5af9b45fc7819c3a9c336f1e (diff) | |
| parent | 97294aca7e066443291cc2d77f8674ac23eabb32 (diff) | |
| download | php-git-70141093a731049ee9220e9e965f61ded56ed4d5.tar.gz | |
Merge branch 'master' into openssl_aead
Diffstat (limited to 'ext/curl')
| -rw-r--r-- | ext/curl/config.w32 | 2 | ||||
| -rw-r--r-- | ext/curl/interface.c | 13 | ||||
| -rw-r--r-- | ext/curl/tests/bug64267.phpt | 1 | ||||
| -rw-r--r-- | ext/curl/tests/bug71523.phpt | 31 |
4 files changed, 42 insertions, 5 deletions
diff --git a/ext/curl/config.w32 b/ext/curl/config.w32 index 965721318e..8ea5f6524c 100644 --- a/ext/curl/config.w32 +++ b/ext/curl/config.w32 @@ -13,7 +13,7 @@ if (PHP_CURL != "no") { && (((PHP_ZLIB=="no") && (CHECK_LIB("zlib_a.lib;zlib.lib", "curl", PHP_CURL))) || (PHP_ZLIB_SHARED && CHECK_LIB("zlib.lib", "curl", PHP_CURL)) || (PHP_ZLIB == "yes" && (!PHP_ZLIB_SHARED))) ) { - EXTENSION("curl", "interface.c multi.c share.c curl_file.c", true); + EXTENSION("curl", "interface.c multi.c share.c curl_file.c"); AC_DEFINE('HAVE_CURL', 1, 'Have cURL library'); AC_DEFINE('HAVE_CURL_SSL', 1, 'Have SSL suppurt in cURL'); AC_DEFINE('HAVE_CURL_EASY_STRERROR', 1, 'Have curl_easy_strerror in cURL'); diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 47b3b6fc41..564d9fcb1c 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -157,7 +157,8 @@ static void _php_curl_close(zend_resource *rsrc); #define CAAL(s, v) add_assoc_long_ex(return_value, s, sizeof(s) - 1, (zend_long) v); #define CAAD(s, v) add_assoc_double_ex(return_value, s, sizeof(s) - 1, (double) v); #define CAAS(s, v) add_assoc_string_ex(return_value, s, sizeof(s) - 1, (char *) (v ? v : "")); -#define CAASTR(s, v) add_assoc_str_ex(return_value, s, sizeof(s) - 1, v ? v : ZSTR_EMPTY_ALLOC()); +#define CAASTR(s, v) add_assoc_str_ex(return_value, s, sizeof(s) - 1, \ + v ? zend_string_copy(v) : ZSTR_EMPTY_ALLOC()); #define CAAZ(s, v) add_assoc_zval_ex(return_value, s, sizeof(s) -1 , (zval *) v); #if defined(PHP_WIN32) || defined(__GNUC__) @@ -1751,7 +1752,7 @@ static php_curl *alloc_curl_handle() memset(&ch->err, 0, sizeof(struct _php_curl_error)); zend_llist_init(&ch->to_free->str, sizeof(char *), (llist_dtor_func_t)curl_free_string, 0); - zend_llist_init(&ch->to_free->post, sizeof(struct HttpPost), (llist_dtor_func_t)curl_free_post, 0); + zend_llist_init(&ch->to_free->post, sizeof(struct HttpPost *), (llist_dtor_func_t)curl_free_post, 0); ch->to_free->slist = emalloc(sizeof(HashTable)); zend_hash_init(ch->to_free->slist, 4, NULL, curl_free_slist, 0); @@ -2475,7 +2476,11 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue) /* {{{ } } ZEND_HASH_FOREACH_END(); - zend_hash_index_update_ptr(ch->to_free->slist, option, slist); + if ((*ch->clone) == 1) { + zend_hash_index_update_ptr(ch->to_free->slist, option, slist); + } else { + zend_hash_next_index_insert_ptr(ch->to_free->slist, slist); + } error = curl_easy_setopt(ch->cp, option, slist); @@ -3032,7 +3037,7 @@ PHP_FUNCTION(curl_getinfo) } #endif if (ch->header.str) { - CAASTR("request_header", zend_string_copy(ch->header.str)); + CAASTR("request_header", ch->header.str); } } else { switch (option) { diff --git a/ext/curl/tests/bug64267.phpt b/ext/curl/tests/bug64267.phpt index 5d5330fef3..ca1fe4b368 100644 --- a/ext/curl/tests/bug64267.phpt +++ b/ext/curl/tests/bug64267.phpt @@ -2,6 +2,7 @@ Bug #64267 (CURLOPT_INFILE doesn't allow reset) --SKIPIF-- <?php +if (getenv("SKIP_ONLINE_TESTS")) die("skip online test"); extension_loaded("curl") or die("skip need ext/curl"); ?> --FILE-- diff --git a/ext/curl/tests/bug71523.phpt b/ext/curl/tests/bug71523.phpt new file mode 100644 index 0000000000..24aa83c620 --- /dev/null +++ b/ext/curl/tests/bug71523.phpt @@ -0,0 +1,31 @@ +--TEST-- +Bug #71523 (Copied handle with new option CURLOPT_HTTPHEADER crashes while curl_multi_exec) +--SKIPIF-- +<?php +if (!extension_loaded("curl")) { + exit("skip curl extension not loaded"); +} +if (getenv("SKIP_ONLINE_TESTS")) { + die("skip online test"); +} +?> +--FILE-- +<?php + +$base = curl_init('http://www.google.com/'); +curl_setopt($base, CURLOPT_RETURNTRANSFER, true); +$mh = curl_multi_init(); + +for ($i = 0; $i < 2; ++$i) { + $ch = curl_copy_handle($base); + curl_setopt($ch, CURLOPT_HTTPHEADER, ['Foo: Bar']); + curl_multi_add_handle($mh, $ch); +} + +do { + curl_multi_exec($mh, $active); +} while ($active); +?> +okey +--EXPECTF-- +okey |
