IMAP COPY creates invalid index data with zlib and mail_log plugins enabled but zlib_save off

Timo Sirainen tss at iki.fi
Fri Nov 27 12:59:20 UTC 2015


> On 02 Nov 2015, at 22:12, Robert L Mathews <lists at tigertech.com> wrote:
> 
> On 10/30/15 3:06 PM, Robert L Mathews wrote:
> 
>> I've noticed that maildir IMAP COPY commands can generate invalid
>> dovecot.index entries when all seven of the following are true:
> 
> As a followup to my own post, I believe I've tracked this problem down
> to this code at lines 119-124 of /src/plugins/zlib/zlib-plugin.c:
> 
> /* don't uncompress input when we are reading a mail that we're just
>    in the middle of saving, and we didn't do the compression ourself.
>    in such situation we're probably checking if the user-given input
>    looks compressed */
> if (_mail->saving && zuser->save_handler == NULL)
>         return zmail->super.istream_opened(_mail, stream);
> 
> When these lines are removed, the problem no longer happens.
> 
> I'm guessing that an IMAP COPY with the seven circumstances I mentioned
> matches "we are reading a mail that we're just in the middle of saving,
> and we didn't do the compression ourself". But the mail apparently does
> need decompressing in this situation.
> 
> It seems odd for the code to not simply decompress the mail in all
> cases. But I'm not sure what other code relies on this check, so I have
> no idea whether removing these lines might cause problems.

The check is there to make sure that people can't try to exploit bugs in compression libraries by uploading something that Dovecot attempts to decompress later on. So if the input looks compressed it's simply rejected. (If zlib_save is enabled this isn't a problem, because the compressed-looking input is compressed again.)

Fixed: http://hg.dovecot.org/dovecot-2.2/rev/574c1e5b3d90



More information about the dovecot mailing list