mirror of
https://github.com/php/php-src.git
synced 2025-08-21 01:45:16 +02:00
Fixed stream_get_contents() when using $maxlength and socket is not
closed. indeyets@php.net on #46049.
This commit is contained in:
parent
3358613c4b
commit
fc938b54c7
2 changed files with 20 additions and 2 deletions
18
ext/standard/tests/streams/stream_get_contents_002.phpt
Normal file
18
ext/standard/tests/streams/stream_get_contents_002.phpt
Normal 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"
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue