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