summaryrefslogtreecommitdiff
path: root/ext/standard
diff options
context:
space:
mode:
authorArnaud Le Blanc <lbarnaud@php.net>2008-11-04 00:42:41 +0000
committerArnaud Le Blanc <lbarnaud@php.net>2008-11-04 00:42:41 +0000
commit55e7b35e6b3eac5b50f3d8f8f550f4546376a94a (patch)
tree722405d340e755eb26458d5da0912618ee36dc71 /ext/standard
parent1c40f21ae8ac27218b89319de7e095d0a9d400f9 (diff)
downloadphp-git-55e7b35e6b3eac5b50f3d8f8f550f4546376a94a.tar.gz
MFH: Fixed bug #46024 (stream_select() doesn't return the correct number)
Diffstat (limited to 'ext/standard')
-rw-r--r--ext/standard/streamsfuncs.c6
-rw-r--r--ext/standard/tests/streams/bug46024.phpt46
2 files changed, 52 insertions, 0 deletions
diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c
index e0f416f8e2..1726675efe 100644
--- a/ext/standard/streamsfuncs.c
+++ b/ext/standard/streamsfuncs.c
@@ -792,6 +792,12 @@ PHP_FUNCTION(stream_select)
retval = stream_array_emulate_read_fd_set(r_array TSRMLS_CC);
if (retval > 0) {
+ if (w_array != NULL) {
+ zend_hash_clean(Z_ARRVAL_P(w_array));
+ }
+ if (e_array != NULL) {
+ zend_hash_clean(Z_ARRVAL_P(e_array));
+ }
RETURN_LONG(retval);
}
}
diff --git a/ext/standard/tests/streams/bug46024.phpt b/ext/standard/tests/streams/bug46024.phpt
new file mode 100644
index 0000000000..5dd19084c4
--- /dev/null
+++ b/ext/standard/tests/streams/bug46024.phpt
@@ -0,0 +1,46 @@
+--TEST--
+Bug #46024 stream_select() doesn't return the correct number
+--SKIPIF--
+<?php if (!getenv('TEST_PHP_EXECUTABLE')) die("TEST_PHP_EXECUTABLE not defined"); ?>
+--FILE--
+<?php
+$php = getenv('TEST_PHP_EXECUTABLE');
+$pipes = array();
+$proc = proc_open(
+ "$php -n -i"
+ ,array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'))
+ ,$pipes, dirname(__FILE__), array(), array('binary_pipes' => true)
+);
+var_dump($proc);
+if (!$proc) {
+ exit(1);
+}
+$r = array($pipes[1]);
+$w = array($pipes[0]);
+$e = null;
+$ret = stream_select($r, $w, $e, 1);
+var_dump($ret === (count($r) + count($w)));
+fread($pipes[0], 1);
+
+$r = array($pipes[1]);
+$w = array($pipes[0]);
+$e = null;
+$ret = stream_select($r, $w, $e, 1);
+var_dump($ret === (count($r) + count($w)));
+
+
+foreach($pipes as $pipe) {
+ fclose($pipe);
+}
+proc_terminate($proc);
+if (defined('SIGKILL')) {
+ proc_terminate($proc, SIGKILL);
+} else {
+ proc_terminate($proc);
+}
+proc_close($proc);
+?>
+--EXPECTF--
+resource(%d) of type (process)
+bool(true)
+bool(true)