summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Wallner <mike@php.net>2012-02-14 19:31:54 +0000
committerMichael Wallner <mike@php.net>2012-02-14 19:31:54 +0000
commit7a58d9f6794d6786891f83bfb32ecfca7161d6dd (patch)
treee13bfb4fc7f104a4c0751754538a08609809ff23
parent4d600bda7083ebaeb71d94b0fb6df3a760268d45 (diff)
downloadphp-git-7a58d9f6794d6786891f83bfb32ecfca7161d6dd.tar.gz
fix compat function not passing along input buffer with php_output_context_pass() if the output_handler_func does not set out_str
-rw-r--r--main/output.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/main/output.c b/main/output.c
index f0a130fcc3..bf0c775e70 100644
--- a/main/output.c
+++ b/main/output.c
@@ -1260,11 +1260,19 @@ static int php_output_handler_compat_func(void **handler_context, php_output_con
PHP_OUTPUT_TSRMLS(output_context);
if (func) {
- uint safe_out_len;
+ char *out_str = NULL;
+ uint out_len = 0;
+
+ func(output_context->in.data, output_context->in.used, &out_str, &out_len, output_context->op TSRMLS_CC);
+
+ if (out_str) {
+ output_context->out.data = out_str;
+ output_context->out.used = out_len;
+ output_context->out.free = 1;
+ } else {
+ php_output_context_pass(output_context);
+ }
- 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;
}
return FAILURE;