Skip to content

Commit

Permalink
Merge branch 'PHP-5.3' of https://git.php.net/push/php-src into PHP-5.3
Browse files Browse the repository at this point in the history
* 'PHP-5.3' of https://git.php.net/push/php-src:
  Fixed bug #64770 stream_select() fails with pipes
  • Loading branch information
Boris Lytochkin committed May 3, 2013
2 parents aa448ad + b1ea0b7 commit f1269d8
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 2 deletions.
4 changes: 4 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -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 ###
Expand Down
4 changes: 2 additions & 2 deletions ext/standard/streamsfuncs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down
51 changes: 51 additions & 0 deletions ext/standard/tests/streams/bug64770.phpt
Original file line number Diff line number Diff line change
@@ -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==

0 comments on commit f1269d8

Please sign in to comment.