diff options
author | Robert Lu <robberphex@gmail.com> | 2018-06-15 14:08:49 +0800 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2018-06-19 12:15:33 +0200 |
commit | ecc1a7c582bf8de1eaa619ac4451399ed58f502a (patch) | |
tree | cab80d06cfce2bb6c462e44ce08f867266d5bdc0 /sapi/cli/php_cli.c | |
parent | 84d7d4e1cc49e657068ddd6f2c57a93165ffb1a5 (diff) | |
download | php-git-ecc1a7c582bf8de1eaa619ac4451399ed58f502a.tar.gz |
Fix bug #44217: Output after stdout/stderr closed cause immediate exit with status 0
We exit with status 255 instead.
Diffstat (limited to 'sapi/cli/php_cli.c')
-rw-r--r-- | sapi/cli/php_cli.c | 21 |
1 files changed, 6 insertions, 15 deletions
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; |