dovecot-2.1: zlib: Getting stream's size failed in some situations.
dovecot at dovecot.org
dovecot at dovecot.org
Tue Jan 24 03:52:41 EET 2012
details: http://hg.dovecot.org/dovecot-2.1/rev/c464072d05e0
changeset: 13986:c464072d05e0
user: Timo Sirainen <tss at iki.fi>
date: Tue Jan 24 03:52:28 2012 +0200
description:
zlib: Getting stream's size failed in some situations.
This could have caused other trouble, such as with dbox +
mail_attachment_dir.
diffstat:
src/plugins/zlib/istream-bzlib.c | 10 ++++++----
src/plugins/zlib/istream-zlib.c | 11 +++++++----
2 files changed, 13 insertions(+), 8 deletions(-)
diffs (108 lines):
diff -r 096c12e69fd6 -r c464072d05e0 src/plugins/zlib/istream-bzlib.c
--- a/src/plugins/zlib/istream-bzlib.c Tue Jan 24 03:51:20 2012 +0200
+++ b/src/plugins/zlib/istream-bzlib.c Tue Jan 24 03:52:28 2012 +0200
@@ -14,7 +14,7 @@
struct istream_private istream;
bz_stream zs;
- uoff_t eof_offset;
+ uoff_t eof_offset, stream_size;
size_t prev_size, high_pos;
struct stat last_parent_statbuf;
@@ -155,6 +155,7 @@
case BZ_STREAM_END:
zstream->eof_offset = stream->istream.v_offset +
(stream->pos - stream->skip);
+ zstream->stream_size = zstream->eof_offset;
if (size == 0) {
stream->istream.eof = TRUE;
return -1;
@@ -282,7 +283,7 @@
return st;
stream->statbuf = *st;
- if (zstream->eof_offset == (uoff_t)-1) {
+ if (zstream->stream_size == (uoff_t)-1) {
uoff_t old_offset = stream->istream.v_offset;
do {
@@ -291,10 +292,10 @@
} while (i_stream_read(&stream->istream) > 0);
i_stream_seek(&stream->istream, old_offset);
- if (zstream->eof_offset == (uoff_t)-1)
+ if (zstream->stream_size == (uoff_t)-1)
return NULL;
}
- stream->statbuf.st_size = zstream->eof_offset;
+ stream->statbuf.st_size = zstream->stream_size;
return &stream->statbuf;
}
@@ -322,6 +323,7 @@
zstream = i_new(struct bzlib_istream, 1);
zstream->eof_offset = (uoff_t)-1;
+ zstream->stream_size = (uoff_t)-1;
zstream->log_errors = log_errors;
i_stream_bzlib_init(zstream);
diff -r 096c12e69fd6 -r c464072d05e0 src/plugins/zlib/istream-zlib.c
--- a/src/plugins/zlib/istream-zlib.c Tue Jan 24 03:51:20 2012 +0200
+++ b/src/plugins/zlib/istream-zlib.c Tue Jan 24 03:52:28 2012 +0200
@@ -25,7 +25,7 @@
struct istream_private istream;
z_stream zs;
- uoff_t eof_offset;
+ uoff_t eof_offset, stream_size;
size_t prev_size, high_pos;
uint32_t crc32;
struct stat last_parent_statbuf;
@@ -189,6 +189,7 @@
}
/* gzip file with concatenated content */
zstream->eof_offset = (uoff_t)-1;
+ zstream->stream_size = (uoff_t)-1;
zstream->header_read = FALSE;
zstream->trailer_read = FALSE;
zstream->crc32 = 0;
@@ -302,6 +303,7 @@
case Z_STREAM_END:
zstream->eof_offset = stream->istream.v_offset +
(stream->pos - stream->skip);
+ zstream->stream_size = zstream->eof_offset;
i_stream_skip(stream->parent,
zstream->prev_size - zstream->zs.avail_in);
zstream->zs.avail_in = 0;
@@ -440,7 +442,7 @@
return st;
stream->statbuf = *st;
- if (zstream->eof_offset == (uoff_t)-1) {
+ if (zstream->stream_size == (uoff_t)-1) {
uoff_t old_offset = stream->istream.v_offset;
do {
@@ -449,10 +451,10 @@
} while (i_stream_read(&stream->istream) > 0);
i_stream_seek(&stream->istream, old_offset);
- if (zstream->eof_offset == (uoff_t)-1)
+ if (zstream->stream_size == (uoff_t)-1)
return NULL;
}
- stream->statbuf.st_size = zstream->eof_offset;
+ stream->statbuf.st_size = zstream->stream_size;
return &stream->statbuf;
}
@@ -481,6 +483,7 @@
zstream = i_new(struct zlib_istream, 1);
zstream->eof_offset = (uoff_t)-1;
+ zstream->stream_size = (uoff_t)-1;
zstream->gz = gz;
zstream->log_errors = log_errors;
More information about the dovecot-cvs
mailing list