diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2007-12-10 14:16:58 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2007-12-10 14:16:58 +0000 |
commit | b9e44139625e5576142592a925807e1748ee9ca0 (patch) | |
tree | 5038d4554aae15aa40f6d6b49e29bba6c587c7a1 | |
parent | fdafd5cf81a97f1e7f277ad2250cecee09e13c22 (diff) | |
download | php-git-b9e44139625e5576142592a925807e1748ee9ca0.tar.gz |
Fixed bug #43522 (stream_get_line() eats additional characters)
-rw-r--r-- | ext/standard/tests/file/bug43522.phpt | 25 | ||||
-rwxr-xr-x | main/streams/streams.c | 4 |
2 files changed, 27 insertions, 2 deletions
diff --git a/ext/standard/tests/file/bug43522.phpt b/ext/standard/tests/file/bug43522.phpt new file mode 100644 index 0000000000..10e44fc352 --- /dev/null +++ b/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 diff --git a/main/streams/streams.c b/main/streams/streams.c index fcc717379b..d627b55514 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -860,9 +860,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 + stream->readpos, *delim, stream->writepos - stream->readpos); + e = memchr(stream->readbuf + stream->readpos, *delim, maxlen); } else { - e = php_memnstr(stream->readbuf + stream->readpos, delim, delim_len, (stream->readbuf + stream->writepos)); + e = php_memnstr(stream->readbuf + stream->readpos, delim, delim_len, (stream->readbuf + stream->readpos + maxlen)); } if (!e) { |