jani Tue May 26 15:48:28 2009 UTC Modified files: /php-src/ext/curl interface.c php_curl.h Log: - Fixed bug #48203 (crash when CURLOPT_STDERR is set to regular file) http://cvs.php.net/viewvc.cgi/php-src/ext/curl/interface.c?r1=1.166&r2=1.167&diff_format=u Index: php-src/ext/curl/interface.c diff -u php-src/ext/curl/interface.c:1.166 php-src/ext/curl/interface.c:1.167 --- php-src/ext/curl/interface.c:1.166 Thu May 21 12:52:59 2009 +++ php-src/ext/curl/interface.c Tue May 26 15:48:28 2009 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: interface.c,v 1.166 2009/05/21 12:52:59 iliaa Exp $ */ +/* $Id: interface.c,v 1.167 2009/05/26 15:48:28 jani Exp $ */ #define ZEND_INCLUDE_FULL_WINDOWS_HEADERS @@ -459,7 +459,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() */ @@ -1689,6 +1689,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; @@ -2334,6 +2348,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); @@ -2353,12 +2372,15 @@ if (ch->handlers->write_header->func_name) { zval_ptr_dtor(&ch->handlers->write_header->func_name); } - if(ch->handlers->progress->func_name) { + if (ch->handlers->progress->func_name) { zval_ptr_dtor(&ch->handlers->progress->func_name); } 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.53&r2=1.54&diff_format=u Index: php-src/ext/curl/php_curl.h diff -u php-src/ext/curl/php_curl.h:1.53 php-src/ext/curl/php_curl.h:1.54 --- php-src/ext/curl/php_curl.h:1.53 Sun May 3 14:58:06 2009 +++ php-src/ext/curl/php_curl.h Tue May 26 15:48:28 2009 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_curl.h,v 1.53 2009/05/03 14:58:06 pajoye Exp $ */ +/* $Id: php_curl.h,v 1.54 2009/05/26 15:48:28 jani Exp $ */ #ifndef _PHP_CURL_H #define _PHP_CURL_H @@ -107,6 +107,7 @@ php_curl_write *write_header; php_curl_read *read; zval *passwd; + zval *stderr; php_curl_progress *progress; } php_curl_handlers;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php