summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Le Blanc <lbarnaud@php.net>2008-11-11 01:55:51 +0000
committerArnaud Le Blanc <lbarnaud@php.net>2008-11-11 01:55:51 +0000
commite13a4238e5ea960093b29f74dd7367d3970324ee (patch)
tree3cba490d9b561fa34cc09124df000f04a199b4fe
parentf6345133b39a3c951ef267985dfe3c5f20cff2c5 (diff)
downloadphp-git-e13a4238e5ea960093b29f74dd7367d3970324ee.tar.gz
MFH: Fixed stream_get_contents() when using $maxlength and socket is not
closed. indeyets@php.net on #46049.
-rw-r--r--ext/standard/tests/streams/stream_get_contents_002.phpt18
-rwxr-xr-xmain/streams/streams.c2
2 files changed, 19 insertions, 1 deletions
diff --git a/ext/standard/tests/streams/stream_get_contents_002.phpt b/ext/standard/tests/streams/stream_get_contents_002.phpt
new file mode 100644
index 0000000000..66ff3fb189
--- /dev/null
+++ b/ext/standard/tests/streams/stream_get_contents_002.phpt
@@ -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"
diff --git a/main/streams/streams.c b/main/streams/streams.c
index 530a8d8e14..a2c956c3af 100755
--- a/main/streams/streams.c
+++ b/main/streams/streams.c
@@ -1243,7 +1243,7 @@ PHPAPI size_t _php_stream_copy_to_mem(php_stream *src, char **buf, size_t maxlen
if (maxlen > 0) {
ptr = *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, maxlen - len);
len += ret;
ptr += ret;