summaryrefslogtreecommitdiff
path: root/ext/curl/interface.c
diff options
context:
space:
mode:
authorPierrick Charron <pierrick@php.net>2011-12-04 01:34:54 +0000
committerPierrick Charron <pierrick@php.net>2011-12-04 01:34:54 +0000
commit109346779a5929d7fd18aa0dc28732b51cc49d0a (patch)
treefdd483cac5cae055b3791e6e1a5cbf1e81c53f73 /ext/curl/interface.c
parent3fe47ef089fc47ae35d6a7ec16bbf4585293595a (diff)
downloadphp-git-109346779a5929d7fd18aa0dc28732b51cc49d0a.tar.gz
Fixed bug #60439curl_copy_handle segfault when used with CURLOPT_PROGRESSFUNCTION
Diffstat (limited to 'ext/curl/interface.c')
-rw-r--r--ext/curl/interface.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index af6133e533..8bbe454ed4 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -1649,11 +1649,18 @@ PHP_FUNCTION(curl_copy_handle)
zval_add_ref(&ch->handlers->write_header->func_name);
dupch->handlers->write_header->func_name = ch->handlers->write_header->func_name;
}
+
+ if (ch->handlers->progress->func_name) {
+ zval_add_ref(&ch->handlers->progress->func_name);
+ dupch->handlers->progress->func_name = ch->handlers->progress->func_name;
+ }
+ dupch->handlers->progress->method = ch->handlers->progress->method;
curl_easy_setopt(dupch->cp, CURLOPT_ERRORBUFFER, dupch->err.str);
curl_easy_setopt(dupch->cp, CURLOPT_FILE, (void *) dupch);
curl_easy_setopt(dupch->cp, CURLOPT_INFILE, (void *) dupch);
curl_easy_setopt(dupch->cp, CURLOPT_WRITEHEADER, (void *) dupch);
+ curl_easy_setopt(dupch->cp, CURLOPT_PROGRESSDATA, (void *) dupch);
efree(dupch->to_free);
dupch->to_free = ch->to_free;