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