From 8e6f8fc4dc8bbb32f5dfb3ff952fd206aa03ac18 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Tue, 4 Nov 2008 00:42:19 +0000 Subject: [PATCH] Fixed bug #46024 (stream_select() doesn't return the correct number) --- ext/standard/streamsfuncs.c | 6 ++++ ext/standard/tests/streams/bug46024.phpt | 46 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 ext/standard/tests/streams/bug46024.phpt diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 93ac9306de..d5552a01cd 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -836,6 +836,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-- + +--FILE-- + 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) -- 2.50.1