Commit: b1ea0b7a7a580f074d889f9ff7a46566917088f2 Author: Anatol Belski <a...@php.net> Fri, 3 May 2013 17:01:33 +0200 Parents: aa448adc8347c072421103d1a92b0a7a75ec873f Branches: PHP-5.3 PHP-5.4 PHP-5.5 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=b1ea0b7a7a580f074d889f9ff7a46566917088f2 Log: Fixed bug #64770 stream_select() fails with pipes returned by proc_open() on Windows x64 Bugs: https://bugs.php.net/64770 Changed paths: M NEWS M ext/standard/streamsfuncs.c A ext/standard/tests/streams/bug64770.phpt Diff: diff --git a/NEWS b/NEWS index cd865d2..2d831ae 100644 --- a/NEWS +++ b/NEWS @@ -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 27042f6..465d72d 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 0000000..ae738d8 --- /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== -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php