]> granicus.if.org Git - php/commitdiff
MFH: Fixed stream_get_contents() when using $maxlength and socket is not
authorArnaud Le Blanc <lbarnaud@php.net>
Tue, 11 Nov 2008 01:55:51 +0000 (01:55 +0000)
committerArnaud Le Blanc <lbarnaud@php.net>
Tue, 11 Nov 2008 01:55:51 +0000 (01:55 +0000)
closed. indeyets@php.net on #46049.

ext/standard/tests/streams/stream_get_contents_002.phpt [new file with mode: 0644]
main/streams/streams.c

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 (file)
index 0000000..66ff3fb
--- /dev/null
@@ -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"
index 530a8d8e14636cb2af0d3a58d2c5ff750adcc951..a2c956c3af5e20420fe849d614e59f3e75a01585 100755 (executable)
@@ -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;