iliaa Fri Jan 12 16:38:40 2007 UTC Modified files: (Branch: PHP_4_4) /php-src NEWS /php-src/ext/curl curl.c Log: Fixed bug #36248 (CURLOPT_HEADERFUNCTION, couldn't set the function in the class). http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.1247.2.920.2.183&r2=1.1247.2.920.2.184&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.1247.2.920.2.183 php-src/NEWS:1.1247.2.920.2.184 --- php-src/NEWS:1.1247.2.920.2.183 Tue Jan 9 17:06:42 2007 +++ php-src/NEWS Fri Jan 12 16:38:39 2007 @@ -3,6 +3,8 @@ ?? Jan 2007, Version 4.4.5 - Fixed bug #39819 (Using $this not in object context can cause segfaults). (Dmitry) +- Fixed bug #36248 (CURLOPT_HEADERFUNCTION, couldn't set the function in the + class). (Ilia) 04 Jan 2007, Version 4.4.5RC1 - Added a meta tag to phpinfo() output to prevent search engines from http://cvs.php.net/viewvc.cgi/php-src/ext/curl/curl.c?r1=1.124.2.30.2.15&r2=1.124.2.30.2.16&diff_format=u Index: php-src/ext/curl/curl.c diff -u php-src/ext/curl/curl.c:1.124.2.30.2.15 php-src/ext/curl/curl.c:1.124.2.30.2.16 --- php-src/ext/curl/curl.c:1.124.2.30.2.15 Mon Jan 1 09:46:40 2007 +++ php-src/ext/curl/curl.c Fri Jan 12 16:38:40 2007 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: curl.c,v 1.124.2.30.2.15 2007/01/01 09:46:40 sebastian Exp $ */ +/* $Id: curl.c,v 1.124.2.30.2.16 2007/01/12 16:38:40 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -702,19 +702,17 @@ retval, 2, argv TSRMLS_CC); ch->in_callback = 0; if (error == FAILURE) { - php_error(E_WARNING, "%s(): Couldn't call the CURLOPT_HEADERFUNCTION", - get_active_function_name(TSRMLS_C)); + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not call the CURLOPT_HEADERFUNCTION"); length = -1; - } - else { + } else { if (Z_TYPE_P(retval) != IS_LONG) { convert_to_long_ex(&retval); } length = Z_LVAL_P(retval); + zval_ptr_dtor(&retval); } zval_ptr_dtor(&argv[0]); zval_ptr_dtor(&argv[1]); - zval_ptr_dtor(&retval); break; } @@ -1075,6 +1073,7 @@ case CURLOPT_WRITEFUNCTION: if (ch->handlers->write->func) { zval_ptr_dtor(&ch->handlers->write->func); + ch->handlers->write->func = NULL; } zval_add_ref(zvalue); ch->handlers->write->func = *zvalue; @@ -1083,6 +1082,7 @@ case CURLOPT_READFUNCTION: if (ch->handlers->read->func) { zval_ptr_dtor(&ch->handlers->read->func); + ch->handlers->read->func = NULL; } zval_add_ref(zvalue); ch->handlers->read->func = *zvalue; @@ -1091,6 +1091,7 @@ case CURLOPT_HEADERFUNCTION: if (ch->handlers->write_header->func) { zval_ptr_dtor(&ch->handlers->write_header->func); + ch->handlers->write_header->func = NULL; } zval_add_ref(zvalue); ch->handlers->write_header->func = *zvalue; @@ -1100,6 +1101,7 @@ case CURLOPT_PASSWDFUNCTION: if (ch->handlers->passwd) { zval_ptr_dtor(&ch->handlers->passwd); + ch->handlers->passwd = NULL; } zval_add_ref(zvalue); ch->handlers->passwd = *zvalue; @@ -1300,10 +1302,13 @@ ch->uses++; if (ch->handlers->write->method == PHP_CURL_RETURN && ch->handlers->write->buf.len > 0) { + --ch->uses; if (ch->handlers->write->type != PHP_CURL_BINARY) smart_str_0(&ch->handlers->write->buf); RETURN_STRINGL(ch->handlers->write->buf.c, ch->handlers->write->buf.len, 0); - } else if (ch->handlers->write->method == PHP_CURL_RETURN) { + } + --ch->uses; + if (ch->handlers->write->method == PHP_CURL_RETURN) { RETURN_STRINGL("", sizeof("") - 1, 0); } @@ -1506,7 +1511,11 @@ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Attempt to close CURL handle from a callback"); return; } - zend_list_delete(Z_LVAL_PP(zid)); + if (ch->uses) { + ch->uses--; + } else { + zend_list_delete(Z_LVAL_PP(zid)); + } } /* }}} */ @@ -1521,14 +1530,22 @@ zend_llist_clean(&ch->to_free.slist); zend_llist_clean(&ch->to_free.post); - if (ch->handlers->write->func) - zval_ptr_dtor(&ch->handlers->write->func); - if (ch->handlers->read->func) + if (ch->handlers->write->func) { + FREE_ZVAL(ch->handlers->write->func); + ch->handlers->read->func = NULL; + } + if (ch->handlers->read->func) { zval_ptr_dtor(&ch->handlers->read->func); - if (ch->handlers->write_header->func) - zval_ptr_dtor(&ch->handlers->write_header->func); - if (ch->handlers->passwd) - zval_ptr_dtor(&ch->handlers->passwd); + ch->handlers->read->func = NULL; + } + if (ch->handlers->write_header->func) { + FREE_ZVAL(ch->handlers->write_header->func); + ch->handlers->write_header->func = NULL; + } + if (ch->handlers->passwd) { + FREE_ZVAL(ch->handlers->passwd); + ch->handlers->passwd = NULL; + } efree(ch->handlers->write); efree(ch->handlers->write_header);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php