From ecc1a7c582bf8de1eaa619ac4451399ed58f502a Mon Sep 17 00:00:00 2001 From: Robert Lu Date: Fri, 15 Jun 2018 14:08:49 +0800 Subject: Fix bug #44217: Output after stdout/stderr closed cause immediate exit with status 0 We exit with status 255 instead. --- sapi/cli/php_cli.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) (limited to 'sapi/cli/php_cli.c') diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c index 27335a2199..d67cefca9f 100644 --- a/sapi/cli/php_cli.c +++ b/sapi/cli/php_cli.c @@ -267,13 +267,9 @@ static inline int sapi_cli_select(php_socket_t fd) return ret != -1; } -PHP_CLI_API size_t sapi_cli_single_write(const char *str, size_t str_length) /* {{{ */ +PHP_CLI_API ssize_t sapi_cli_single_write(const char *str, size_t str_length) /* {{{ */ { -#ifdef PHP_WRITE_STDOUT - zend_long ret; -#else - size_t ret; -#endif + ssize_t ret; if (cli_shell_callbacks.cli_shell_write) { cli_shell_callbacks.cli_shell_write(str, str_length); @@ -283,16 +279,10 @@ PHP_CLI_API size_t sapi_cli_single_write(const char *str, size_t str_length) /* do { ret = write(STDOUT_FILENO, str, str_length); } while (ret <= 0 && errno == EAGAIN && sapi_cli_select(STDOUT_FILENO)); - - if (ret <= 0) { - return 0; - } - - return ret; #else ret = fwrite(str, 1, MIN(str_length, 16384), stdout); - return ret; #endif + return ret; } /* }}} */ @@ -300,7 +290,7 @@ static size_t sapi_cli_ub_write(const char *str, size_t str_length) /* {{{ */ { const char *ptr = str; size_t remaining = str_length; - size_t ret; + ssize_t ret; if (!str_length) { return 0; @@ -317,8 +307,9 @@ static size_t sapi_cli_ub_write(const char *str, size_t str_length) /* {{{ */ while (remaining > 0) { ret = sapi_cli_single_write(ptr, remaining); - if (!ret) { + if (ret < 0) { #ifndef PHP_CLI_WIN32_NO_CONSOLE + EG(exit_status) = 255; php_handle_aborted_connection(); #endif break; -- cgit v1.2.1