pajoye Sat, 10 Oct 2009 09:24:59 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=289495
Log: - Merge: Fixed bug #49517 (cURL's CURLOPT_FILE prevents file from being deleted after fclose) Bug: http://bugs.php.net/49517 (Closed) cURL's CURLOPT_FILE prevents file from being deleted after fclose Changed paths: U php/php-src/branches/PHP_5_3_1/ext/curl/interface.c Modified: php/php-src/branches/PHP_5_3_1/ext/curl/interface.c =================================================================== --- php/php-src/branches/PHP_5_3_1/ext/curl/interface.c 2009-10-10 09:17:01 UTC (rev 289494) +++ php/php-src/branches/PHP_5_3_1/ext/curl/interface.c 2009-10-10 09:24:59 UTC (rev 289495) @@ -1424,10 +1424,22 @@ dupch->cp = cp; dupch->uses = 0; + if (ch->handlers->write->stream) { + Z_ADDREF_P(dupch->handlers->write->stream); + dupch->handlers->write->stream = ch->handlers->write->stream; + } dupch->handlers->write->method = ch->handlers->write->method; dupch->handlers->write->type = ch->handlers->write->type; + if (ch->handlers->read->stream) { + Z_ADDREF_P(ch->handlers->read->stream); + } + dupch->handlers->read->stream = ch->handlers->read->stream; dupch->handlers->read->method = ch->handlers->read->method; dupch->handlers->write_header->method = ch->handlers->write_header->method; + if (ch->handlers->write_header->stream) { + Z_ADDREF_P(ch->handlers->write_header->stream); + } + dupch->handlers->write_header->stream = ch->handlers->write_header->stream; dupch->handlers->write->fp = ch->handlers->write->fp; dupch->handlers->write_header->fp = ch->handlers->write_header->fp; @@ -1673,9 +1685,10 @@ switch (option) { case CURLOPT_FILE: if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] == '+') { - zend_list_addref(Z_LVAL_PP(zvalue)); + Z_ADDREF_PP(zvalue); ch->handlers->write->fp = fp; ch->handlers->write->method = PHP_CURL_FILE; + ch->handlers->write->stream = *zvalue; } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "the provided file handle is not writable"); RETVAL_FALSE; @@ -1684,9 +1697,10 @@ break; case CURLOPT_WRITEHEADER: if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] == '+') { - zend_list_addref(Z_LVAL_PP(zvalue)); + Z_ADDREF_PP(zvalue); ch->handlers->write_header->fp = fp; ch->handlers->write_header->method = PHP_CURL_FILE; + ch->handlers->write_header->stream = *zvalue; } else { php_error_docref(NULL TSRMLS_CC, E_WARNING, "the provided file handle is not writable"); RETVAL_FALSE; @@ -1694,9 +1708,10 @@ } break; case CURLOPT_INFILE: - zend_list_addref(Z_LVAL_PP(zvalue)); + Z_ADDREF_PP(zvalue); ch->handlers->read->fp = fp; ch->handlers->read->fd = Z_LVAL_PP(zvalue); + ch->handlers->read->stream = *zvalue; break; case CURLOPT_STDERR: if (((php_stream *) what)->mode[0] != 'r' || ((php_stream *) what)->mode[1] == '+') { @@ -2357,6 +2372,16 @@ efree(ch->header.str); } + if (ch->handlers->write_header->stream) { + zval_ptr_dtor(&ch->handlers->write_header->stream); + } + if (ch->handlers->write->stream) { + zval_ptr_dtor(&ch->handlers->write->stream); + } + if (ch->handlers->read->stream) { + zval_ptr_dtor(&ch->handlers->read->stream); + } + efree(ch->handlers->write); efree(ch->handlers->write_header); efree(ch->handlers->read);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php