summaryrefslogtreecommitdiff
path: root/sapi/cli/php_cli.c
diff options
context:
space:
mode:
authorRobert Lu <robberphex@gmail.com>2018-06-15 14:08:49 +0800
committerChristoph M. Becker <cmbecker69@gmx.de>2018-06-19 12:15:33 +0200
commitecc1a7c582bf8de1eaa619ac4451399ed58f502a (patch)
treecab80d06cfce2bb6c462e44ce08f867266d5bdc0 /sapi/cli/php_cli.c
parent84d7d4e1cc49e657068ddd6f2c57a93165ffb1a5 (diff)
downloadphp-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.c21
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;