]> granicus.if.org Git - php/commitdiff
Fixes #68948 related to a BC break introduced by #68532 fix.
authorSimon JAILLET <sjaillet@gmail.com>
Sat, 6 May 2017 14:29:34 +0000 (16:29 +0200)
committerSara Golemon <pollita@php.net>
Mon, 6 Nov 2017 22:34:42 +0000 (17:34 -0500)
ext/standard/tests/streams/bug68948.phpt [new file with mode: 0644]
ext/standard/tests/streams/stream_set_chunk_size.phpt
main/streams/streams.c

diff --git a/ext/standard/tests/streams/bug68948.phpt b/ext/standard/tests/streams/bug68948.phpt
new file mode 100644 (file)
index 0000000..7ce9d7a
--- /dev/null
@@ -0,0 +1,30 @@
+--TEST--
+Bug #68948: feof() on temporary streams broken
+--FILE--
+<?php
+
+$testString = '0123456789';
+
+$stream = fopen("php://memory", "r+");
+fwrite($stream, $testString);
+rewind($stream);
+
+var_dump(fread($stream, 10));
+var_dump(ftell($stream));
+var_dump(feof($stream));
+
+rewind($stream);
+
+var_dump(fread($stream, 11));
+var_dump(ftell($stream));
+var_dump(feof($stream));
+
+?>
+--EXPECT--
+string(10) "0123456789"
+int(10)
+bool(false)
+string(10) "0123456789"
+int(10)
+bool(true)
+
index ce272519c4c96fd33e53f46baa7e536ebd224cdb..88f4897e9389fd432883a5ae118e19a0dd805192 100644 (file)
@@ -39,7 +39,7 @@ var_dump(fwrite($f, str_repeat('b', 3)));
 
 echo "should return previous chunk size (1)\n";
 var_dump(stream_set_chunk_size($f, 100));
-echo "should elicit one read of size 100 (chunk size)\n";
+echo "should elicit 3 reads of size 100 (chunk size)\n";
 var_dump(strlen(fread($f, 250)));
 echo "should elicit one read of size 100 (chunk size)\n";
 var_dump(strlen(fread($f, 50)));
@@ -67,13 +67,15 @@ write with size: 1
 int(3)
 should return previous chunk size (1)
 int(1)
-should elicit one read of size 100 (chunk size)
+should elicit 3 reads of size 100 (chunk size)
 read with size: 100
-int(100)
-should elicit one read of size 100 (chunk size)
 read with size: 100
+read with size: 100
+int(250)
+should elicit one read of size 100 (chunk size)
 int(50)
 should elicit no read because there is sufficient cached data
+read with size: 100
 int(50)
 should elicit 2 writes of size 100 and one of size 50
 write with size: 100
index dab8505d412af61998b393245b7944978857e74a..b1099b6fcc377e5e8b49ba9978a7192459b87106 100644 (file)
@@ -710,7 +710,7 @@ PHPAPI size_t _php_stream_read(php_stream *stream, char *buf, size_t size)
                }
 
                /* just break anyway, to avoid greedy read */
-               if (stream->wrapper != &php_plain_files_wrapper) {
+               if (!stream->wrapper || stream->wrapper->is_url) {
                        break;
                }
        }