summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2007-12-10 14:16:58 +0000
committerIlia Alshanetsky <iliaa@php.net>2007-12-10 14:16:58 +0000
commitb9e44139625e5576142592a925807e1748ee9ca0 (patch)
tree5038d4554aae15aa40f6d6b49e29bba6c587c7a1
parentfdafd5cf81a97f1e7f277ad2250cecee09e13c22 (diff)
downloadphp-git-b9e44139625e5576142592a925807e1748ee9ca0.tar.gz
Fixed bug #43522 (stream_get_line() eats additional characters)
-rw-r--r--ext/standard/tests/file/bug43522.phpt25
-rwxr-xr-xmain/streams/streams.c4
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) {