diff options
| author | Ilia Alshanetsky <iliaa@php.net> | 2007-12-10 14:18:02 +0000 |
|---|---|---|
| committer | Ilia Alshanetsky <iliaa@php.net> | 2007-12-10 14:18:02 +0000 |
| commit | 8a9ad0081d3ab49223cba88994d8c5c212cd07bf (patch) | |
| tree | 9b9528b2cbfb6f00a9f9f204956d892e6ceb5eb4 | |
| parent | 63dcbb73f0223f98c8666cee15e73a60891e0191 (diff) | |
| download | php-git-8a9ad0081d3ab49223cba88994d8c5c212cd07bf.tar.gz | |
MFB: Fixed bug #43522 (stream_get_line() eats additional characters)
| -rw-r--r-- | NEWS | 2 | ||||
| -rw-r--r-- | ext/standard/tests/file/bug43522.phpt | 25 | ||||
| -rwxr-xr-x | main/streams/streams.c | 4 |
3 files changed, 29 insertions, 2 deletions
@@ -4,6 +4,8 @@ PHP NEWS - Fixed weired behavior in CGI parameter parsing. (Dmitry, Hannes Magnusson) - Fixed bug #43533 (escapeshellarg('') returns null). (Ilia) +- Fixed bug #43522 (stream_get_line() eats additional characters). (Felipe, + Ilia) - Fixed bug #43495 (array_merge_recursive() crashes with recursive arrays). (Ilia) - Fixed bug #43493 (pdo_pgsql does not send username on connect when password 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 ae45653d55..39780cd5a4 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -856,9 +856,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) { |
