]> granicus.if.org Git - php/commitdiff
Fixed stream_get_contents() when using $maxlength and socket is not
authorArnaud Le Blanc <lbarnaud@php.net>
Tue, 11 Nov 2008 01:55:19 +0000 (01:55 +0000)
committerArnaud Le Blanc <lbarnaud@php.net>
Tue, 11 Nov 2008 01:55:19 +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 6f9a4eef1b4378ef7732688e420c0208d77215c3..ba2f65c5d3476f41a975feee04e4f518616d1f8f 100755 (executable)
@@ -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;