From: Arnaud Le Blanc Date: Tue, 4 Nov 2008 00:42:19 +0000 (+0000) Subject: Fixed bug #46024 (stream_select() doesn't return the correct number) X-Git-Tag: BEFORE_HEAD_NS_CHANGE~95 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e6f8fc4dc8bbb32f5dfb3ff952fd206aa03ac18;p=php Fixed bug #46024 (stream_select() doesn't return the correct number) --- 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)