[Dovecot] Size detection/replair does not work with zlib

Charles Sprickman spork at bway.net
Thu Dec 12 22:38:10 EET 2013


Sorry for the top post, but this is a quick one.

While I wasn't using compressed mailboxes, I ran into a similar bug, and I can't help but wonder if there's some commonality here.  There was no resolution (can't find a bug tracker to add the issue to), but have a look:

http://thr3ads.net/dovecot/2013/10/2693193-cached-message-size-errors  (note: gmane seems down, hence the oddball archive service)

Charles

On Dec 12, 2013, at 6:47 AM, Roland Rosenfeld wrote:

> Hi!
> 
> Usually dovecot auto detects or repairs the size of a maildir
> message.  So I can place a message named "foo" in the cur directory
> and dovecot uses it.
> 
> Now I tried the same with a zlib compressed message but here dovecot
> doesn't recognize/repair the size of the message.
> 
> When I access this folder via IMAP the connection is diconnected and
> in dovecot logs I see the following error messages:
> 
> Error: Cached message size smaller than expected (805 < 2666)
> Error: Corrupted index cache file /somedir/dovecot.index.cache: Broken physical size for mail UID 23
> Error: read() failed: Input/output error (FETCH for mailbox INBOX UID 23)
> Disconnected: Internal error occurred. Refer to server log for more information. [2013-12-12 10:54:18] in=321 out=1977
> 
> As you can see in the first line, dovecot does know the compressed
> size of the file (805) as well as the uncompressed size (2666), but it
> isn't able to repair its index for this.
> 
> If I modify the setup a little with a standard file naming but with a
> wrong file size in S-flag (compressed size instead of uncompressed
> size), the log entries become stranger:
> 
> Error: Cached message size smaller than expected (805 < 2666)
> Error: Maildir filename has wrong S value, renamed the file from /somedir/cur/1386772057.M152553P9709.host,S=805:2, to /somedir/cur/1386772057.M152553P9709.host,S=805:2,
> 
> So here dovecot detects the wrong S value, but instead of fixing it by
> using the uncompressed size, it renames to the same file name as
> before...
> 
> All the above was tested with dovecot 2.1.17.
> We did a short cross test with 2.2.9 which gives somewhat different
> error messages, but also isn't able to detect/repair the
> (uncompressed) file size:
> 
> Error: Cached message size smaller than expected (805 < 2666)
> Error: Corrupted index cache file /somedir/dovecot.index.cache: Broken physical size for mail UID 23
> Error: read(zlib(/somedir/cur/foo)) failed: Invalid argument
> 
> We also noticed that on both dovecot versions after trying to access
> the above file, dovecot.index.cache is always deleted and not
> rebuild...
> 
> Is all this intended behavior?  It sounds different to the standard
> behavior of dovecot, that repairs broken folders if possible...
> 
> Ciao
> Roland



More information about the dovecot mailing list