From: Ilia Alshanetsky Date: Tue, 29 Aug 2006 17:10:52 +0000 (+0000) Subject: MFB: Fixed bug #38637 (curl_copy_handle() fails to fully copy the cURL X-Git-Tag: RELEASE_1_0_0RC1~1860 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a577e391429a3d2f4a9219ffdf978faafb6b6ae5;p=php MFB: Fixed bug #38637 (curl_copy_handle() fails to fully copy the cURL handle). --- diff --git a/ext/curl/interface.c b/ext/curl/interface.c index c6ba522d18..49a4227af4 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -1137,7 +1137,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; @@ -1145,6 +1145,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); }