]> granicus.if.org Git - php/commitdiff
Fix #79650: php-win.exe 100% cpu lockup
authorChristoph M. Becker <cmbecker69@gmx.de>
Sun, 31 May 2020 11:28:09 +0000 (13:28 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Mon, 1 Jun 2020 11:22:44 +0000 (13:22 +0200)
As of PHP 7.3.0, `sapi_cli_single_write()` is supposed to return `< 0`
on failure, but `fwrite()` returns a `size_t`, and signals error by
setting the stream's error indicator.  We have to cater to that.

NEWS
sapi/cli/php_cli.c

diff --git a/NEWS b/NEWS
index e41d3be4ea4e0d2567d72d34d796178aed13e728..e73dbc58671953b7e370e1bc028e3a586d5b16cf 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,8 @@ PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? ????, PHP 7.3.20
 
+- Core:
+  . Fixed bug #79650 (php-win.exe 100% cpu lockup). (cmb)
 
 ?? ??? ????, PHP 7.3.19
 
index 342c5e5feb80a79480cb8bd34e957bbee00695cc..2b6ace754c945e3f04a476533fcd422b86112e58 100644 (file)
@@ -279,6 +279,9 @@ PHP_CLI_API ssize_t sapi_cli_single_write(const char *str, size_t str_length) /*
        } while (ret <= 0 && errno == EAGAIN && sapi_cli_select(STDOUT_FILENO));
 #else
        ret = fwrite(str, 1, MIN(str_length, 16384), stdout);
+       if (ret == 0 && ferror(stdout)) {
+               return -1;
+       }
 #endif
        return ret;
 }