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

Reply via email to