[Dovecot] Bug: MODSEQ FETCH return (?)

Michael M. Slusarz slusarz at curecanti.org
Wed Oct 15 06:29:58 EEST 2008


Hi Timo - hope things are well :)  Playing around with the CONDSTORE  
(RFC 4551) stuff while testing the IMAP lib I am writing and I think I  
have found a bug in Dovecot 1.2.

RFC 4551 [4] identifies the FETCH response to a MODSEQ request as follows:
    fetch-mod-resp      = "MODSEQ" SP "(" permsg-modsequence ")"

with 'permsg-modsequence' defined as:
    permsg-modsequence  = mod-sequence-value
                           ;; per message mod-sequence

Unfortunately, Dovecot 1.2 is returning as follows:
S: * 1 FETCH (UID 1 MODSEQ 3 FLAGS (\Flagged \Deleted \Recent))

Where, under the RFC, I believe it should be:
S: * 1 FETCH (UID 1 MODSEQ (3) FLAGS (\Flagged \Deleted \Recent))

Here is a proposed patch (WARNING: my C skills = zero):

# HG changeset patch
# User root at bigworm.curecanti.org
# Date 1224040830 21600
# Branch HEAD
# Node ID 0c0615bc6bf74ccf109049e251a30b8ab5f8ea67
# Parent  40df4d4cced09fa72d37581d0c526416d2c6e3de
per RFC 4551, MODSEQ FETCH responses need to be wrapped in ().

diff -r 40df4d4cced0 -r 0c0615bc6bf7 src/imap/imap-fetch.c
--- a/src/imap/imap-fetch.c	Tue Oct 14 14:52:44 2008 +0300
+++ b/src/imap/imap-fetch.c	Tue Oct 14 21:20:30 2008 -0600
@@ -749,7 +749,7 @@
  	modseq = mail_get_modseq(mail);
  	if (ctx->client->highest_fetch_modseq < modseq)
  		ctx->client->highest_fetch_modseq = modseq;
-	str_printfa(ctx->cur_str, "MODSEQ %llu ",
+	str_printfa(ctx->cur_str, "MODSEQ (%llu) ",
  		    (unsigned long long)modseq);
  	return 1;
  }


Hope this helps/is correct.

michael



More information about the dovecot mailing list