Fixed stream_get_contents() when using $maxlength and socket is not

closed. indeyets@php.net on #46049.
This commit is contained in:
Arnaud Le Blanc 2008-11-11 01:55:19 +00:00
parent 3358613c4b
commit fc938b54c7
2 changed files with 20 additions and 2 deletions

View file

@ -0,0 +1,18 @@
--TEST--
stream_get_contents() - Testing on socket with $maxlength
--SKIPIF--
<?php
if (substr(PHP_OS, 0, 3) == 'WIN') die("skip: non windows test");
?>
--FILE--
<?php
$sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
stream_set_timeout($sockets[1], 6000);
fwrite($sockets[0], b"foo");
var_dump(stream_get_contents($sockets[1], 3));
?>
--EXPECT--
string(3) "foo"

View file

@ -1672,7 +1672,7 @@ PHPAPI size_t _php_stream_copy_to_mem_ex(php_stream *src, zend_uchar rettype, vo
if (maxlen > 0) {
if (rettype == IS_UNICODE) {
ptr.u = *buf = pemalloc_rel_orig(UBYTES(maxlen + 1), persistent);
while ((len < maxlen) & !php_stream_eof(src)) {
while ((len < maxlen) && !php_stream_eof(src)) {
int ulen;
ret = php_stream_read_unicode_ex(src, ptr.u, maxlen - len, maxchars);
@ -1685,7 +1685,7 @@ PHPAPI size_t _php_stream_copy_to_mem_ex(php_stream *src, zend_uchar rettype, vo
return len;
} else {
ptr.s = *buf = pemalloc_rel_orig(maxlen + 1, persistent);
while ((len < maxlen) & !php_stream_eof(src)) {
while ((len < maxlen) && !php_stream_eof(src)) {
ret = php_stream_read(src, ptr.s, maxlen - len);
len += ret;
ptr.s += ret;