summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-08-29 17:10:40 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-08-29 17:10:40 +0000
commit5ea308054639da733bb3e2d573065dc56b6d2de1 (patch)
treec8281ef5cf668a48721a5509eb2f04b970e647e5 /ext
parent7c618c40bc098c74c471bb772227e21a4edfc7cb (diff)
downloadphp-git-5ea308054639da733bb3e2d573065dc56b6d2de1.tar.gz
Fixed bug #38637 (curl_copy_handle() fails to fully copy the cURL handle).
Diffstat (limited to 'ext')
-rw-r--r--ext/curl/interface.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/ext/curl/interface.c b/ext/curl/interface.c
index 888a822e66..dccba1ae49 100644
--- a/ext/curl/interface.c
+++ b/ext/curl/interface.c
@@ -1139,7 +1139,7 @@ PHP_FUNCTION(curl_copy_handle)
}
alloc_curl_handle(&dupch);
- TSRMLS_SET_CTX(ch->thread_ctx);
+ TSRMLS_SET_CTX(dupch->thread_ctx);
dupch->cp = cp;
dupch->handlers->write->method = ch->handlers->write->method;
@@ -1147,6 +1147,38 @@ PHP_FUNCTION(curl_copy_handle)
dupch->handlers->read->method = ch->handlers->read->method;
dupch->handlers->write_header->method = ch->handlers->write_header->method;
+ dupch->handlers->write->fp = ch->handlers->write->fp;
+ dupch->handlers->write_header->fp = ch->handlers->write_header->fp;
+ dupch->handlers->read->fp = ch->handlers->read->fp;
+ dupch->handlers->read->fd = ch->handlers->read->fd;
+
+ if (ch->handlers->passwd) {
+ zval_add_ref(&ch->handlers->passwd);
+ dupch->handlers->passwd = ch->handlers->passwd;
+ curl_easy_setopt(ch->cp, CURLOPT_PASSWDDATA, (void *) dupch);
+ }
+ if (ch->handlers->write->func_name) {
+ zval_add_ref(&ch->handlers->write->func_name);
+ dupch->handlers->write->func_name = ch->handlers->write->func_name;
+ }
+ if (ch->handlers->read->func_name) {
+ zval_add_ref(&ch->handlers->read->func_name);
+ dupch->handlers->read->func_name = ch->handlers->read->func_name;
+ }
+ if (ch->handlers->write_header->func_name) {
+ zval_add_ref(&ch->handlers->write_header->func_name);
+ dupch->handlers->write_header->func_name = ch->handlers->write_header->func_name;
+ }
+
+ 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);
+
+ zend_llist_copy(&dupch->to_free.str, &ch->to_free.str);
+ zend_llist_copy(&dupch->to_free.slist, &ch->to_free.slist);
+ zend_llist_copy(&dupch->to_free.post, &ch->to_free.post);
+
ZEND_REGISTER_RESOURCE(return_value, dupch, le_curl);
dupch->id = Z_LVAL_P(return_value);
}