diff options
author | Boris Lytochkin <lytboris@php.net> | 2013-05-03 19:23:46 +0400 |
---|---|---|
committer | Boris Lytochkin <lytboris@php.net> | 2013-05-03 19:23:46 +0400 |
commit | f1269d80c575e535370c813e8da154e0339203d0 (patch) | |
tree | 309692655ac9bd75d9a2308cc3f02426c0626c68 | |
parent | aa448adc8347c072421103d1a92b0a7a75ec873f (diff) | |
parent | b1ea0b7a7a580f074d889f9ff7a46566917088f2 (diff) | |
download | php-git-f1269d80c575e535370c813e8da154e0339203d0.tar.gz |
Merge branch 'PHP-5.3' of https://git.php.net/push/php-src into PHP-5.3
* 'PHP-5.3' of https://git.php.net/push/php-src:
Fixed bug #64770 stream_select() fails with pipes
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/standard/streamsfuncs.c | 4 | ||||
-rw-r--r-- | ext/standard/tests/streams/bug64770.phpt | 51 |
3 files changed, 57 insertions, 2 deletions
@@ -11,6 +11,10 @@ PHP NEWS . Fixed bug #64726 (Segfault when calling fetch_object on a use_result and DB pointer has closed). (Laruence) +- Streams: + . Fixed bug #64770 (stream_select() fails with pipes returned by proc_open() + on Windows x64). (Anatol) + ?? ??? 2013, PHP 5.3.25 ### ADD ENTRIES ABOVE FOR 5.3.26. 5.3.25 NEWS WILL BE UPDATED BY RM ON MERGE ### diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 27042f6e5d..465d72d378 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -611,7 +611,7 @@ static int stream_array_to_fd_set(zval *stream_array, fd_set *fds, php_socket_t { zval **elem; php_stream *stream; - php_socket_t this_fd; + php_socket_t this_fd = 0; int cnt = 0; if (Z_TYPE_P(stream_array) != IS_ARRAY) { @@ -648,7 +648,7 @@ static int stream_array_from_fd_set(zval *stream_array, fd_set *fds TSRMLS_DC) zval **elem, **dest_elem; php_stream *stream; HashTable *new_hash; - php_socket_t this_fd; + php_socket_t this_fd = 0; int ret = 0; if (Z_TYPE_P(stream_array) != IS_ARRAY) { diff --git a/ext/standard/tests/streams/bug64770.phpt b/ext/standard/tests/streams/bug64770.phpt new file mode 100644 index 0000000000..ae738d83cd --- /dev/null +++ b/ext/standard/tests/streams/bug64770.phpt @@ -0,0 +1,51 @@ +--TEST-- +Bug #64770 stream_select() fails with pipes from proc_open() +--FILE-- +<?php + +$descs = array( + 0 => array('pipe', 'r'), // stdin + 1 => array('pipe', 'w'), // stdout + 2 => array('pipe', 'w'), // strerr +); + +$other_opts = array('suppress_errors' => false, 'binary_pipes' => true); + +$p = proc_open('dir', $descs, $pipes, '.', NULL, $other_opts); + +if (is_resource($p)) { + $data = ''; + + while (1) { + $w = $e = NULL; + $n = stream_select($pipes, $w, $e, 300); + + if ($n === false) { + echo "no streams \n"; + break; + } else if ($n === 0) { + echo "process timed out\n"; + proc_terminate($p, 9); + break; + } else if ($n > 0) { + $line = fread($pipes[1], 8192); + if (strlen($line) == 0) { + /* EOF */ + break; + } + $data .= $line; + } + } + var_dump(strlen($data)); + + $ret = proc_close($p); + var_dump($ret); +} else { + echo "no process\n"; +} +?> +==DONE== +--EXPECTF-- +int(%d) +int(0) +==DONE== |