#35849 [Com]: [PATCH] stream_copy_to_stream() do strange behavior
| From: | eddi at ai000 dot de | Date: | Mon, 29 May 2006 09:14:46 +0000 |
| Subject: | #35849 [Com]: [PATCH] stream_copy_to_stream() do strange behavior | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-97721@lists.php.net to get a copy of this message | ||
ID: 35849
Comment by: eddi at ai000 dot de
Reported By: sqchen at citiz dot net
Status: Assigned
Bug Type: Streams related
Operating System: *
PHP Version: 5CVS-2005-12-30 (cvs)
Assigned To: wez
New Comment:
stream_copy_to_stream() does not copy from sockets
$s=stream_socket_server('tcp://127.0.0.1:1100',$er,$es);
while($c=stream_socket_accept($s,200)){
$dat=fopen('text.txt','w');
stream_copy_to_stream($c,$dat);
}
PHP 5.1.4 (cli)
GNU/Linux 2.6.16.18
Previous Comments:
------------------------------------------------------------------------
[2005-12-30 14:52:26] sniper@php.net
Assigned to the streams maintainer.
------------------------------------------------------------------------
[2005-12-30 13:32:52] nlopess@php.net
I can see two bugs in this report:
* mmap()'ed fds aren't seeked() to update the position
* the length is a size_t, where it should be a ssize_t, because
PHP_STREAM_COPY_ALL is defined to -1
my patch: http://mega.ist.utl.pt/~ncpl/php_stream_mmap.txt
it makes all negative values to read all the file (to be consistent
with non-mmap'ed fds).
I can also see some long/size_t/ssize_t mixes, which can be problematic
in some platforms.
------------------------------------------------------------------------
[2005-12-30 08:25:20] sqchen at citiz dot net
SORRY, I have make a mistake on the code above, Below is the right
code
Description:
------------
stream_copy_to_stream() do strange behavior when the maxlength
parameter
is negative, see the following codes:
Reproduce code:
---------------
<?php
$src = fopen("1.txt", "r"); //"hell, world" in "1.txt"
$dest1 = fopen("des1.txt", "w");
$dest2 = fopen("des2.txt", "w");
/*----seg1------*/
stream_copy_to_stream($src, $des1, -2);
readfile("des1.txt"); //hello, world
stream_copy_to_stream($src, $des2);
readfile("des2.txt"); //nothing? why?
/* please compare it with seg2*/
/*----seg2-------*/
stream_copy_to_stream($src, $des1, 2);
readfile("des1.txt"); //he
stream_copy_to_stream($src, $des2);
readfile("des2.txt"); //hello, world
?>
------------------------------------------------------------------------
[2005-12-30 07:43:17] sqchen at citiz dot net
Description:
------------
stream_copy_to_stream() do strange behavior when the maxlength
parameter is negative, see the following codes:
Reproduce code:
---------------
<?php
$src = fopen("1.txt", "r"); //"hell, world" in "1.txt"
$dest1 = fopen("des1.txt", "w");
$dest2 = fopen("des2.txt", "w");
/*----seg1------*/
stream_copy_to_stream($src, $des1, -2);
readfile("des1.txt"); //hello, world
stream_copy_to_stream($src, $des1);
readfile("des2.txt"); //nothing? why?
/* please compare it with seg2*/
/*----seg2-------*/
stream_copy_to_stream($src, $des1, 2);
readfile("des1.txt"); //he
stream_copy_to_stream($src, $des1);
readfile("des2.txt"); //hello, world
?>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=35849&edit=1