Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2011-12-11 20:40:36 UTC (rev 320875) +++ php/php-src/branches/PHP_5_3/NEWS 2011-12-11 21:08:15 UTC (rev 320876) @@ -2,6 +2,10 @@ ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2011, PHP 5.3.9 +- Streams: + . Fixed bug #60455 (stream_get_line misbehaves if EOF is not detected together + with the last read). (Gustavo) + 08 Dec 2011, PHP 5.3.9RC3 - Filter: Added: php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug60455_01.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug60455_01.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug60455_01.phpt 2011-12-11 21:08:15 UTC (rev 320876) @@ -0,0 +1,21 @@ +--TEST-- +Bug #60455: stream_get_line and 1-line noeol input +--FILE-- +s++ == 0) + return "a\n"; + + return ""; + } + function stream_eof() { + return $this->s >= 2; + } + +} + +stream_wrapper_register("test", "TestStream"); + +$f = fopen("test://", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +--EXPECT-- +string(1) "a" Property changes on: php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug60455_02.phpt ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Added: svn:eol-style + native Added: php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug60455_03.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug60455_03.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug60455_03.phpt 2011-12-11 21:08:15 UTC (rev 320876) @@ -0,0 +1,53 @@ +--TEST-- +Bug #60455: stream_get_line and 2 lines, one possibly empty +--FILE-- +lines[] = "a\n"; + $this->lines[] = ($path == "test://nonempty2nd" ? "b\n" : "\n"); + if ($path == "test://eofafter2nd") + $this->eofth = 2; + return true; + } + function stream_read($count) { + if (key_exists($this->s++, $this->lines)) + return $this->lines[$this->s - 1]; + + return ""; + } + function stream_eof() { + return $this->s >= $this->eofth; + } + +} + +stream_wrapper_register("test", "TestStream"); + +$f = fopen("test://nonempty2nd", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +$f = fopen("test://", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +$f = fopen("test://eofafter2nd", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} + + +--EXPECT-- +string(1) "a" +string(1) "b" +string(1) "a" +string(0) "" +string(1) "a" +string(0) "" Property changes on: php/php-src/branches/PHP_5_3/ext/standard/tests/streams/bug60455_03.phpt ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Added: svn:eol-style + native Modified: php/php-src/branches/PHP_5_3/main/streams/streams.c =================================================================== --- php/php-src/branches/PHP_5_3/main/streams/streams.c 2011-12-11 20:40:36 UTC (rev 320875) +++ php/php-src/branches/PHP_5_3/main/streams/streams.c 2011-12-11 21:08:15 UTC (rev 320876) @@ -918,9 +918,8 @@ just_read = (stream->writepos - stream->readpos) - len; len += just_read; - /* read operation have less data than request; assume the stream is - * temporarily or permanently out of data */ - if (just_read < toread) { + /* Assume the stream is temporarily or permanently out of data */ + if (just_read == 0) { break; } } Added: php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug60455_01.phpt =================================================================== --- php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug60455_01.phpt (rev 0) +++ php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug60455_01.phpt 2011-12-11 21:08:15 UTC (rev 320876) @@ -0,0 +1,21 @@ +--TEST-- +Bug #60455: stream_get_line and 1-line noeol input +--FILE-- +s++ == 0) + return "a\n"; + + return ""; + } + function stream_eof() { + return $this->s >= 2; + } + +} + +stream_wrapper_register("test", "TestStream"); + +$f = fopen("test://", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +--EXPECT-- +string(1) "a" Property changes on: php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug60455_02.phpt ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Added: svn:eol-style + native Added: php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug60455_03.phpt =================================================================== --- php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug60455_03.phpt (rev 0) +++ php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug60455_03.phpt 2011-12-11 21:08:15 UTC (rev 320876) @@ -0,0 +1,53 @@ +--TEST-- +Bug #60455: stream_get_line and 2 lines, one possibly empty +--FILE-- +lines[] = "a\n"; + $this->lines[] = ($path == "test://nonempty2nd" ? "b\n" : "\n"); + if ($path == "test://eofafter2nd") + $this->eofth = 2; + return true; + } + function stream_read($count) { + if (key_exists($this->s++, $this->lines)) + return $this->lines[$this->s - 1]; + + return ""; + } + function stream_eof() { + return $this->s >= $this->eofth; + } + +} + +stream_wrapper_register("test", "TestStream"); + +$f = fopen("test://nonempty2nd", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +$f = fopen("test://", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +$f = fopen("test://eofafter2nd", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} + + +--EXPECT-- +string(1) "a" +string(1) "b" +string(1) "a" +string(0) "" +string(1) "a" +string(0) "" Property changes on: php/php-src/branches/PHP_5_4/ext/standard/tests/streams/bug60455_03.phpt ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Added: svn:eol-style + native Modified: php/php-src/branches/PHP_5_4/main/streams/streams.c =================================================================== --- php/php-src/branches/PHP_5_4/main/streams/streams.c 2011-12-11 20:40:36 UTC (rev 320875) +++ php/php-src/branches/PHP_5_4/main/streams/streams.c 2011-12-11 21:08:15 UTC (rev 320876) @@ -989,9 +989,8 @@ just_read = (stream->writepos - stream->readpos) - len; len += just_read; - /* read operation have less data than request; assume the stream is - * temporarily or permanently out of data */ - if (just_read < toread) { + /* Assume the stream is temporarily or permanently out of data */ + if (just_read == 0) { break; } } Added: php/php-src/trunk/ext/standard/tests/streams/bug60455_01.phpt =================================================================== --- php/php-src/trunk/ext/standard/tests/streams/bug60455_01.phpt (rev 0) +++ php/php-src/trunk/ext/standard/tests/streams/bug60455_01.phpt 2011-12-11 21:08:15 UTC (rev 320876) @@ -0,0 +1,21 @@ +--TEST-- +Bug #60455: stream_get_line and 1-line noeol input +--FILE-- +s++ == 0) + return "a\n"; + + return ""; + } + function stream_eof() { + return $this->s >= 2; + } + +} + +stream_wrapper_register("test", "TestStream"); + +$f = fopen("test://", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +--EXPECT-- +string(1) "a" Property changes on: php/php-src/trunk/ext/standard/tests/streams/bug60455_02.phpt ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Added: svn:eol-style + native Added: php/php-src/trunk/ext/standard/tests/streams/bug60455_03.phpt =================================================================== --- php/php-src/trunk/ext/standard/tests/streams/bug60455_03.phpt (rev 0) +++ php/php-src/trunk/ext/standard/tests/streams/bug60455_03.phpt 2011-12-11 21:08:15 UTC (rev 320876) @@ -0,0 +1,53 @@ +--TEST-- +Bug #60455: stream_get_line and 2 lines, one possibly empty +--FILE-- +lines[] = "a\n"; + $this->lines[] = ($path == "test://nonempty2nd" ? "b\n" : "\n"); + if ($path == "test://eofafter2nd") + $this->eofth = 2; + return true; + } + function stream_read($count) { + if (key_exists($this->s++, $this->lines)) + return $this->lines[$this->s - 1]; + + return ""; + } + function stream_eof() { + return $this->s >= $this->eofth; + } + +} + +stream_wrapper_register("test", "TestStream"); + +$f = fopen("test://nonempty2nd", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +$f = fopen("test://", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} +$f = fopen("test://eofafter2nd", "r"); +while (!feof($f)) { + $line = stream_get_line($f, 99, "\n"); + var_dump($line); +} + + +--EXPECT-- +string(1) "a" +string(1) "b" +string(1) "a" +string(0) "" +string(1) "a" +string(0) "" Property changes on: php/php-src/trunk/ext/standard/tests/streams/bug60455_03.phpt ___________________________________________________________________ Added: svn:keywords + Id Rev Revision Added: svn:eol-style + native Modified: php/php-src/trunk/main/streams/streams.c =================================================================== --- php/php-src/trunk/main/streams/streams.c 2011-12-11 20:40:36 UTC (rev 320875) +++ php/php-src/trunk/main/streams/streams.c 2011-12-11 21:08:15 UTC (rev 320876) @@ -989,9 +989,8 @@ just_read = (stream->writepos - stream->readpos) - len; len += just_read; - /* read operation have less data than request; assume the stream is - * temporarily or permanently out of data */ - if (just_read < toread) { + /* Assume the stream is temporarily or permanently out of data */ + if (just_read == 0) { break; } }