diff options
author | Arnaud Le Blanc <lbarnaud@php.net> | 2008-11-04 00:42:41 +0000 |
---|---|---|
committer | Arnaud Le Blanc <lbarnaud@php.net> | 2008-11-04 00:42:41 +0000 |
commit | 55e7b35e6b3eac5b50f3d8f8f550f4546376a94a (patch) | |
tree | 722405d340e755eb26458d5da0912618ee36dc71 /ext/standard | |
parent | 1c40f21ae8ac27218b89319de7e095d0a9d400f9 (diff) | |
download | php-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.c | 6 | ||||
-rw-r--r-- | ext/standard/tests/streams/bug46024.phpt | 46 |
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) |