summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sapi/cgi/cgi_main.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index d509757432..fd8a666a39 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -89,14 +89,21 @@ static int _print_module_info ( zend_module_entry *module, void *arg ) {
static int sapi_cgibin_ub_write(const char *str, uint str_length)
{
+ const char *ptr = str;
+ uint remaining = str_length;
size_t ret;
- ret = fwrite(str, 1, str_length, stdout);
- if (ret != str_length) {
- php_handle_aborted_connection();
+ while (remaining > 0)
+ {
+ ret = fwrite(ptr, 1, MIN(remaining, 16384), stdout);
+ if (!ret) {
+ php_handle_aborted_connection();
+ }
+ ptr += ret;
+ remaining -= ret;
}
- return ret;
+ return str_length;
}