diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2006-08-29 17:10:40 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2006-08-29 17:10:40 +0000 |
commit | 5ea308054639da733bb3e2d573065dc56b6d2de1 (patch) | |
tree | c8281ef5cf668a48721a5509eb2f04b970e647e5 /ext | |
parent | 7c618c40bc098c74c471bb772227e21a4edfc7cb (diff) | |
download | php-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.c | 34 |
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); } |