]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: Wrap mail.get_binary_stream() to fix it
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 17 Nov 2017 19:44:50 +0000 (21:44 +0200)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 17 Nov 2017 19:51:13 +0000 (21:51 +0200)
Fixes using FETCH BINARY[..] with virtual mailboxes crashing with:

Panic: file index-mail-binary.c: line 585 (index_mail_get_binary_stream): assertion failed: (mail->data.stream != NULL)

src/plugins/virtual/virtual-mail.c

index 2659fc39af88b1173e7160310bfbaab3031c2ef3..7f3922f47e15584d2910faa9edacd58ee9607f56 100644 (file)
@@ -452,6 +452,28 @@ virtual_mail_get_stream(struct mail *mail, bool get_body,
        return 0;
 }
 
+static int
+virtual_mail_get_binary_stream(struct mail *mail,
+                              const struct message_part *part,
+                              bool include_hdr, uoff_t *size_r,
+                              unsigned int *lines_r, bool *binary_r,
+                              struct istream **stream_r)
+{
+       struct virtual_mail *vmail = (struct virtual_mail *)mail;
+       struct mail *backend_mail;
+
+       if (backend_mail_get(vmail, &backend_mail) < 0)
+               return -1;
+
+       struct mail_private *p = (struct mail_private *)backend_mail;
+       if (p->v.get_binary_stream(backend_mail, part, include_hdr,
+                                  size_r, lines_r, binary_r, stream_r) < 0) {
+               virtual_box_copy_error(mail->box, backend_mail->box);
+               return -1;
+       }
+       return 0;
+}
+
 static int
 virtual_mail_get_special(struct mail *mail, enum mail_fetch_field field,
                         const char **value_r)
@@ -540,7 +562,7 @@ struct mail_vfuncs virtual_mail_vfuncs = {
        virtual_mail_get_headers,
        virtual_mail_get_header_stream,
        virtual_mail_get_stream,
-       index_mail_get_binary_stream,
+       virtual_mail_get_binary_stream,
        virtual_mail_get_special,
        virtual_mail_get_backend_mail,
        index_mail_update_flags,