summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/tests/streams/bug78883.phpt33
1 files changed, 33 insertions, 0 deletions
diff --git a/ext/standard/tests/streams/bug78883.phpt b/ext/standard/tests/streams/bug78883.phpt
new file mode 100644
index 0000000000..591d6f1939
--- /dev/null
+++ b/ext/standard/tests/streams/bug78883.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #78883 (fgets(STDIN) fails on Windows)
+--SKIPIF--
+<?php
+if (PHP_OS_FAMILY !== 'Windows') die('skip this test is for Windows platforms only');
+if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
+?>
+--FILE--
+<?php
+$descriptorspec = array(
+ 0 => array("pipe", "rb"),
+ 1 => array("pipe", "wb"),
+ //2 => array("file", "stderr.txt", "ab")
+);
+$pipes = [];
+$cmd = proc_open('cmd.exe "/c START ^"^" /WAIT php -r ^"var_dump(fgets(STDIN));"', $descriptorspec, $pipes);
+var_dump(is_resource($cmd));
+$cmdpid = proc_get_status($cmd)['pid'];
+sleep(1);
+$bug_is_present = !proc_get_status($cmd)['running'];
+if (!$bug_is_present) {
+ // if the bug is not present, it will hang waiting for stdin,
+ // thus cmd is still running and we should kill it
+ shell_exec("taskkill /T /F /PID {$cmdpid}");
+}
+fclose($pipes[0]);
+fclose($pipes[1]);
+proc_close($cmd);
+var_dump($bug_is_present);
+?>
+--EXPECT--
+bool(true)
+bool(false)