From 21fb4c103062942b8436e88ed40b0c1c1601d99b Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Sat, 29 Dec 2007 10:50:12 +0000 Subject: [PATCH] apply correct fix for bug #43522 fix Unicode streams too this time --- main/streams/streams.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/main/streams/streams.c b/main/streams/streams.c index b6d22c6e70..9fe5681a77 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -1104,10 +1104,17 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re if (delim_len == 0 || !delim) { toread = maxlen; } else { + size_t seek_len; + + seek_len = stream->writepos - stream->readpos; + if (seek_len > maxlen) { + seek_len = maxlen; + } + if (delim_len == 1) { - e = memchr(stream->readbuf.s + stream->readpos, *delim, maxlen); + e = memchr(stream->readbuf.s + stream->readpos, *delim, seek_len); } else { - e = php_memnstr(stream->readbuf.s + stream->readpos, delim, delim_len, (stream->readbuf.s + stream->readpos + maxlen)); + e = php_memnstr(stream->readbuf.s + stream->readpos, delim, delim_len, (stream->readbuf.s + stream->readpos + seek_len)); } if (!e) { @@ -1153,10 +1160,17 @@ PHPAPI UChar *php_stream_get_record_unicode(php_stream *stream, size_t maxlen, s if (delim_len == 0 || !delim) { toread = maxlen; } else { + size_t seek_len; + + seek_len = stream->writepos - stream->readpos; + if (seek_len > maxlen) { + seek_len = maxlen; + } + if (delim_len == 1) { - e = u_memchr(stream->readbuf.u + stream->readpos, *delim, stream->writepos - stream->readpos); + e = u_memchr(stream->readbuf.u + stream->readpos, *delim, seek_len); } else { - e = u_strFindFirst(stream->readbuf.u + stream->readpos, stream->writepos - stream->readpos, delim, delim_len); + e = u_strFindFirst(stream->readbuf.u + stream->readpos, stream->readbuf.u + stream->readpos + seek_len, delim, delim_len); } if (!e) { -- 2.50.1