Merge pull request #785 from phord/gzip-eos

Don't try to read concatenated gzip streams
This commit is contained in:
Tim Stack 2020-10-20 09:29:54 -07:00 committed by GitHub
commit 4b30dffd6b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 24 deletions

View File

@ -152,27 +152,9 @@ void line_buffer::gz_indexed::init_stream()
this->strm.avail_out = 0; this->strm.avail_out = 0;
int rc = inflateInit2(&strm, GZ_HEADER_MODE); int rc = inflateInit2(&strm, GZ_HEADER_MODE);
if (rc != Z_OK) { if (rc != Z_OK) {
throw(rc); // FIXME: exception wrapper log_error(" inflateInit2: %d %s", (int)rc, this->strm.msg ? this->strm.msg : "");
} }
} }
void line_buffer::gz_indexed::continue_stream()
{
// Save our position and output buffer
auto total_in = this->strm.total_in;
auto total_out = this->strm.total_out;
auto avail_out = this->strm.avail_out;
auto next_out = this->strm.next_out;
init_stream();
// Restore position and output buffer
this->strm.total_in = total_in;
this->strm.total_out = total_out;
this->strm.avail_out = avail_out;
this->strm.next_out = next_out;
}
void line_buffer::gz_indexed::open(int fd) void line_buffer::gz_indexed::open(int fd)
{ {
this->close(); this->close();
@ -204,11 +186,10 @@ int line_buffer::gz_indexed::stream_data(void * buf, size_t size)
? Z_SYNC_FLUSH : Z_BLOCK; ? Z_SYNC_FLUSH : Z_BLOCK;
auto err = inflate(&this->strm, flush); auto err = inflate(&this->strm, flush);
if (err == Z_STREAM_END) { if (err == Z_STREAM_END) {
// Reached end of stream; re-init for a possible subsequent stream break;
continue_stream();
} else if (err != Z_OK) { } else if (err != Z_OK) {
log_error(" inflate-error: %d", (int)err); log_error(" inflate-error: %d %s", (int)err, this->strm.msg ? this->strm.msg : "");
throw error(err); // FIXME: exception wrapper return 0;
} }
if (this->strm.total_in >= last + SYNCPOINT_SIZE && if (this->strm.total_in >= last + SYNCPOINT_SIZE &&

View File

@ -104,7 +104,6 @@ public:
void close(); void close();
void init_stream(); void init_stream();
void continue_stream();
void open(int fd); void open(int fd);
int stream_data(void * buf, size_t size); int stream_data(void * buf, size_t size);
void seek(off_t offset); void seek(off_t offset);