diff options
| author | Ilia Alshanetsky <iliaa@php.net> | 2005-04-05 03:00:04 +0000 |
|---|---|---|
| committer | Ilia Alshanetsky <iliaa@php.net> | 2005-04-05 03:00:04 +0000 |
| commit | d9aea604b332501a787c53e2210d7d93d54dea08 (patch) | |
| tree | 489ad22effad3e06a8c43bbbb22cd437d669f3be | |
| parent | 0b0fc93a55791d15697720396f5d414b7c55e3b9 (diff) | |
| download | php-git-d9aea604b332501a787c53e2210d7d93d54dea08.tar.gz | |
Fixed bug #30362 (stream_get_line() not reading data correctly).
| -rwxr-xr-x | main/streams/streams.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/main/streams/streams.c b/main/streams/streams.c index 1e326f2208..23b894b2b0 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -843,6 +843,7 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re { char *e, *buf; size_t toread; + int skip = 0; php_stream_fill_read_buffer(stream, maxlen TSRMLS_CC); @@ -850,15 +851,16 @@ 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, *delim, stream->readbuflen); + e = memchr(stream->readbuf + stream->readpos, *delim, stream->readbuflen - stream->readpos); } else { - e = php_memnstr(stream->readbuf, delim, delim_len, (stream->readbuf + stream->readbuflen)); + e = php_memnstr(stream->readbuf + stream->readpos, delim, delim_len, (stream->readbuf + stream->readbuflen)); } if (!e) { toread = maxlen; } else { - toread = e - (char *) stream->readbuf; + toread = e - (char *) stream->readbuf - stream->readpos; + skip = 1; } } @@ -868,8 +870,12 @@ PHPAPI char *php_stream_get_record(php_stream *stream, size_t maxlen, size_t *re buf = emalloc(toread + 1); *returned_len = php_stream_read(stream, buf, toread); - + if (*returned_len >= 0) { + if (skip) { + stream->readpos += delim_len; + stream->position += delim_len; + } buf[*returned_len] = '\0'; return buf; } else { |
