Browse Source

MFB: Fixed bug #43522 (stream_get_line() eats additional characters)

experimental/first_unicode_implementation
Ilia Alshanetsky 19 years ago
parent
commit
d963eaffcc
  1. 25
      ext/standard/tests/file/bug43522.phpt
  2. 4
      main/streams/streams.c

25
ext/standard/tests/file/bug43522.phpt

@ -0,0 +1,25 @@
--TEST--
Bug #43522 (stream_get_line() eats additional characters)
--FILE--
<?php // 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
$fp = fopen(__FILE__, 'r'); // Open self
DoTest($fp, 'ZZZ'); // test multi-char delimiter
DoTest($fp, "Z"); // test single-char delimiter
function DoTest($fp, $delim) {
echo "Delimiter: " . $delim . "\n";
rewind($fp);
echo "\t" . stream_get_line($fp, 10, $delim) . "\n";
echo "\t" . stream_get_line($fp, 10, $delim) . "\n";
}
?>
--EXPECT--
Delimiter: ZZZ
<?php // 1
234567890A
Delimiter: Z
<?php // 1
234567890A

4
main/streams/streams.c

@ -1105,9 +1105,9 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re
toread = maxlen;
} else {
if (delim_len == 1) {
e = memchr(stream->readbuf.s + stream->readpos, *delim, stream->writepos - stream->readpos);
e = memchr(stream->readbuf.s + stream->readpos, *delim, maxlen);
} else {
e = php_memnstr(stream->readbuf.s + stream->readpos, delim, delim_len, (stream->readbuf.s + stream->writepos));
e = php_memnstr(stream->readbuf.s + stream->readpos, delim, delim_len, (stream->readbuf.s + stream->readpos + maxlen));
}
if (!e) {

Loading…
Cancel
Save