jani            Tue May 26 15:50:44 2009 UTC

  Modified files:              (Branch: PHP_5_2)
    /php-src    NEWS 
    /php-src/ext/curl   interface.c php_curl.h 
  Log:
  MFH:- Fixed bug #48203 (Crash when CURLOPT_STDERR is set to regular file)
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.1523&r2=1.2027.2.547.2.1524&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.1523 php-src/NEWS:1.2027.2.547.2.1524
--- php-src/NEWS:1.2027.2.547.2.1523    Tue May 26 14:38:34 2009
+++ php-src/NEWS        Tue May 26 15:50:43 2009
@@ -37,6 +37,7 @@
   with RecursiveIteratorIterator leads to a segfault). (Scott)
 - Fixed bug #48204 (xmlwriter_open_uri() does not emit warnings on invalid
   paths). (Ilia)
+- Fixed bug #48203 (Crash when CURLOPT_STDERR is set to regular file). (Jani)
 - Fixed bug #48202 (Out of Memory error message when passing invalid file path)
   (Pierre)
 - Fixed bug #48156 (Added support for lcov v1.7). (Ilia)
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/interface.c?r1=1.62.2.14.2.50&r2=1.62.2.14.2.51&diff_format=u
Index: php-src/ext/curl/interface.c
diff -u php-src/ext/curl/interface.c:1.62.2.14.2.50 
php-src/ext/curl/interface.c:1.62.2.14.2.51
--- php-src/ext/curl/interface.c:1.62.2.14.2.50 Thu May 21 12:53:24 2009
+++ php-src/ext/curl/interface.c        Tue May 26 15:50:44 2009
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: interface.c,v 1.62.2.14.2.50 2009/05/21 12:53:24 iliaa Exp $ */
+/* $Id: interface.c,v 1.62.2.14.2.51 2009/05/26 15:50:44 jani Exp $ */
 
 #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS
 
@@ -370,7 +370,7 @@
        le_curl_multi_handle = 
zend_register_list_destructors_ex(_php_curl_multi_close, NULL, "curl", 
module_number);
 
        /* See http://curl.haxx.se/lxr/source/docs/libcurl/symbols-in-versions
-          or curl src/docs/libcurl/symbols-in-versions for a (almost) complete 
list 
+          or curl src/docs/libcurl/symbols-in-versions for a (almost) complete 
list
           of options and which version they were introduced */
 
        /* Constants for curl_setopt() */
@@ -1460,6 +1460,20 @@
                                        ch->handlers->read->fp = fp;
                                        ch->handlers->read->fd = 
Z_LVAL_PP(zvalue);
                                        break;
+                               case CURLOPT_STDERR:
+                                       if (((php_stream *) what)->mode[0] != 
'r') {
+                                               if (ch->handlers->stderr) {
+                                                       
zval_ptr_dtor(&ch->handlers->stderr);
+                                               }
+                                               zval_add_ref(zvalue);
+                                               ch->handlers->stderr = *zvalue;
+                                               
zend_list_addref(Z_LVAL_PP(zvalue));
+                                       } else {
+                                               php_error_docref(NULL 
TSRMLS_CC, E_WARNING, "the provided file handle is not writable");
+                                               RETVAL_FALSE;
+                                               return 1;
+                                       }
+                                       /* break omitted intentionally */
                                default:
                                        error = curl_easy_setopt(ch->cp, 
option, fp);
                                        break;
@@ -2046,6 +2060,11 @@
        fprintf(stderr, "DTOR CALLED, ch = %x\n", ch);
 #endif
 
+       /* Prevent crash inside cURL if passed file has already been closed */
+       if (ch->handlers->stderr && Z_REFCOUNT_P(ch->handlers->stderr) <= 0) {
+               curl_easy_setopt(ch->cp, CURLOPT_STDERR, stderr);
+       }
+
        curl_easy_cleanup(ch->cp);
 #if LIBCURL_VERSION_NUM < 0x071101
        zend_llist_clean(&ch->to_free.str);
@@ -2068,6 +2087,9 @@
        if (ch->handlers->passwd) {
                zval_ptr_dtor(&ch->handlers->passwd);
        }
+       if (ch->handlers->stderr) {
+               zval_ptr_dtor(&ch->handlers->stderr);
+       }
        if (ch->header.str_len > 0) {
                efree(ch->header.str);
        }
http://cvs.php.net/viewvc.cgi/php-src/ext/curl/php_curl.h?r1=1.44.2.2.2.5&r2=1.44.2.2.2.6&diff_format=u
Index: php-src/ext/curl/php_curl.h
diff -u php-src/ext/curl/php_curl.h:1.44.2.2.2.5 
php-src/ext/curl/php_curl.h:1.44.2.2.2.6
--- php-src/ext/curl/php_curl.h:1.44.2.2.2.5    Wed Dec 31 11:17:36 2008
+++ php-src/ext/curl/php_curl.h Tue May 26 15:50:44 2009
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_curl.h,v 1.44.2.2.2.5 2008/12/31 11:17:36 sebastian Exp $ */
+/* $Id: php_curl.h,v 1.44.2.2.2.6 2009/05/26 15:50:44 jani Exp $ */
 
 #ifndef _PHP_CURL_H
 #define _PHP_CURL_H
@@ -101,6 +101,7 @@
        php_curl_write *write_header;
        php_curl_read  *read;
        zval           *passwd;
+       zval           *stderr;
 } php_curl_handlers;
 
 struct _php_curl_error  {



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to