dovecot: If mail_get_stream() succeeds but mail_get_*_size() fai...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Dec 22 03:05:34 EET 2007
details: http://hg.dovecot.org/dovecot/rev/ebdd050c0a58
changeset: 7022:ebdd050c0a58
user: Timo Sirainen <tss at iki.fi>
date: Sat Dec 22 02:53:20 2007 +0200
description:
If mail_get_stream() succeeds but mail_get_*_size() fails, we didn't
reference the stream so we must not unreference it later either.
diffstat:
1 file changed, 10 insertions(+), 9 deletions(-)
src/imap/imap-fetch-body.c | 19 ++++++++++---------
diffs (50 lines):
diff -r c4f4fa03e14e -r ebdd050c0a58 src/imap/imap-fetch-body.c
--- a/src/imap/imap-fetch-body.c Sat Dec 22 02:52:39 2007 +0200
+++ b/src/imap/imap-fetch-body.c Sat Dec 22 02:53:20 2007 +0200
@@ -323,21 +323,22 @@ static int fetch_body(struct imap_fetch_
const struct imap_fetch_body_data *body)
{
const struct message_size *fetch_size;
+ struct istream *input;
struct message_size hdr_size, body_size;
if (body->section[0] == '\0') {
- if (mail_get_stream(mail, NULL, NULL, &ctx->cur_input) < 0)
- return -1;
- if (mail_get_virtual_size(mail, &body_size.virtual_size) < 0 ||
+ if (mail_get_stream(mail, NULL, NULL, &input) < 0 ||
+ mail_get_virtual_size(mail, &body_size.virtual_size) < 0 ||
mail_get_physical_size(mail, &body_size.physical_size) < 0)
return -1;
} else {
if (mail_get_stream(mail, &hdr_size,
body->section[0] == 'H' ? NULL : &body_size,
- &ctx->cur_input) < 0)
+ &input) < 0)
return -1;
}
+ ctx->cur_input = input;
i_stream_ref(ctx->cur_input);
ctx->update_partial = TRUE;
@@ -872,14 +873,14 @@ static int fetch_rfc822(struct imap_fetc
{
struct message_size size;
const char *str;
-
- if (mail_get_stream(mail, NULL, NULL, &ctx->cur_input) < 0)
- return -1;
-
- if (mail_get_virtual_size(mail, &size.virtual_size) < 0 ||
+ struct istream *input;
+
+ if (mail_get_stream(mail, NULL, NULL, &input) < 0 ||
+ mail_get_virtual_size(mail, &size.virtual_size) < 0 ||
mail_get_physical_size(mail, &size.physical_size) < 0)
return -1;
+ ctx->cur_input = input;
i_stream_ref(ctx->cur_input);
ctx->update_partial = FALSE;
More information about the dovecot-cvs
mailing list