mike Tue, 01 Jun 2010 13:16:33 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=300046
Log:
* raise warning if zend_fcall_info_init() cannot resolve the callback
* fix pointer mismatch
Changed paths:
U php/php-src/trunk/main/output.c
Modified: php/php-src/trunk/main/output.c
===================================================================
--- php/php-src/trunk/main/output.c 2010-06-01 13:06:46 UTC (rev 300045)
+++ php/php-src/trunk/main/output.c 2010-06-01 13:16:33 UTC (rev 300046)
@@ -412,7 +412,7 @@
Create a user level output handler */
PHPAPI php_output_handler *php_output_handler_create_user(zval
*output_handler, size_t chunk_size, int flags TSRMLS_DC)
{
- char *handler_name = NULL;
+ char *handler_name = NULL, *error = NULL;
php_output_handler *handler = NULL;
php_output_handler_alias_ctor_t *alias = NULL;
php_output_handler_user_func_t *user = NULL;
@@ -428,14 +428,17 @@
}
default:
user = ecalloc(1,
sizeof(php_output_handler_user_func_t));
- if (SUCCESS == zend_fcall_info_init(output_handler, 0,
&user->fci, &user->fcc, &handler_name, NULL TSRMLS_CC)) {
+ if (SUCCESS == zend_fcall_info_init(output_handler, 0,
&user->fci, &user->fcc, &handler_name, &error TSRMLS_CC)) {
handler = php_output_handler_init(handler_name,
strlen(handler_name), chunk_size, (flags & ~0xf) | PHP_OUTPUT_HANDLER_USER
TSRMLS_CC);
Z_ADDREF_P(output_handler);
user->zoh = output_handler;
handler->func.user = user;
} else {
- /* TODO(helly) log the rror? */
efree(user);
+ if (error) {
+ php_error_docref("ref.outcontrol"
TSRMLS_CC, E_WARNING, "%s", error);
+ efree(error);
+ }
}
if (handler_name) {
efree(handler_name);
@@ -1187,7 +1190,10 @@
PHP_OUTPUT_TSRMLS(output_context);
if (func) {
- func(output_context->in.data, output_context->in.used,
&output_context->out.data, &output_context->out.used, output_context->op
TSRMLS_CC);
+ uint safe_out_len;
+
+ func(output_context->in.data, output_context->in.used,
&output_context->out.data, &safe_out_len, output_context->op TSRMLS_CC);
+ output_context->out.used = safe_out_len;
output_context->out.free = 1;
return SUCCESS;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php