[Dovecot] imaptest-20130617 seems to be reporting spurious header changes

Mark Weaver mark-clist at npsl.co.uk
Wed Sep 25 02:06:31 EEST 2013


I'm trying to use this to test an IMAP server I'm developing (I picked 
the nightly up from the link on the wiki page at 
http://www.imapwiki.org/ImapTest/Installation).  With one client using 
the mailbox dovecot-crlf (http://www.dovecot.org/tmp/dovecot-crlf) I get 
messages like:

Error: test at npsl.co.uk[67]: 1035253882.5041.34.camel at hurina: Header From 
changed 'Timo Sirainen <tss at iki.fi>
Timo Sirainen <tss at iki.fi' (len 52) -> 'Timo Sirainen <tss at iki.fi>' (len 
26): * 1 FETCH (UID 2093 FLAGS () BODY ("text" "plain" ("charset" 
"us-ascii") NIL NIL "7bit" 913 0) BODY[HEADER.FIELDS (From From 
Delivered-To) ] "From: Timo Sirainen <tss at iki.fi>
From: Timo Sirainen <tss at iki.fi>
Delivered-To: dovecot at procontrol.fi

" ENVELOPE ("22 Oct 2002 05:31:22 +0300" "[dovecot] Re: Architectural 
questions" (("Timo Sirainen" NIL "tss" "iki.fi")) (("" NIL 
"dovecot-bounce" "procontrol.fi")) (("Timo Sirainen" NIL "tss" 
"iki.fi")) (("" NIL "dovecot" "procontrol.fi")) NIL NIL 
"<1035249894.5044.28.camel at hurina>" "<1035253882.5041.34.camel at hurina>") 
BODY[HEADER.FIELDS (Cc Cc From) ] "From: Timo Sirainen <tss at iki.fi>

")

(I added the dump of the string length by modifying the code).  As I am 
reading it the test program has got the wrong string rather than the 
server -- the From header in the mbox file is

From: Timo Sirainen <tss at iki.fi>

which is 26 characters long, not 52, and includes the closing angle 
bracket, and the code that prints the header out is in 
src/mailbox-state.c, line 377:

                         client_state_error(client,
                                 "%s: Header %s changed '%.*s' (len %d) 
-> '%.*\
s' (len %d)",
                                 msg->message_id, fetch_headers[i].name,
                                 (int)orig_headers[j].value_len,
                                 (const char *)orig_headers[j].value,
                                 (int)orig_headers[j].value_len,
                                 (int)fetch_headers[i].value_len,
                                 (const char *)fetch_headers[i].value,
                                 (int)fetch_headers[i].value_len);

Have I read this upside down or is there an issue with the tests?  If it 
is an issue with the tests, any pointers as to where to start looking 
for the issue would be helpful.

Thanks,

Mark


More information about the dovecot mailing list