BUGFIX: Cyrus 2.3.10 incorrect initial msgno in upload_messages_from

Bron Gondwana brong at fastmail.fm
Tue Oct 23 08:08:18 EDT 2007


On Tue, 23 Oct 2007 09:32:18 +0100 (BST), "David Carter" <dpc22 at cam.ac.uk> said:
> On Tue, 23 Oct 2007, Bron Gondwana wrote:
> 
> > Oct 23 03:47:06 imap4 slot407/sync_client[20103]: IOERROR: opening 
> > message file 10 of MAILBOXNAME: No such file or directory
> 
> I think that this error relates to the master rather than the replica.
> 
> It looks like an UPLOAD is failing because it can't open message with UID 
> 10 on the master. Errors from the replica will typically get reported as 
> UPLOAD received NO response: (whatever the error was).

And my guess that it was the MinorVersion field is vindicated,
VINDICATED I say.  So much for the doubters (hi Rob, added to
the CC this time)

A simple think about the offsets would have been a good hint too,
MinorVersion is bytes 9-12, conveniently 88 bytes (one index record)
before the first real index record.

An ideal place for "msgno == 0" to point to in fact.

  for (; (index_list->count <= max_count) &&
     (msgno <= mailbox->exists); msgno++) {
      r = mailbox_read_index_record(mailbox, msgno, &record);

      if (r) {
    syslog(LOG_ERR,
           "IOERROR: reading index entry for msgno %lu of %s: %m",
           record.uid, mailbox->name);
    return(IMAP_IOERROR);
      }

      if (record.uid <= old_last_uid) continue;

      /* Message with this GUID exists on client but not server */
      sync_index_list_add(index_list, msgno, &record);
  }

I guess that explains why a bogus initial record with "UID 10" would
be added to the index_list if it happened to be read.

Yes, a crc32 check would have caught this (unlikely that "spare4" will
contain a valid crc32).

Why was this rare?  It would only be noticed for a mailbox with fewer
than 10 messages where the conditions for upload_messages_from to be
called existed (append with no other mailbox events presumably)

I guess a more complete patch would contain an "assert(msgno > 0)" in
mailbox_read_index_record (and anything else that deals with msgno for
that matter), but this is the most important thing.

By the way, my cyrus-largemailboxappend-2.3.9.diff doesn't have this
bug - it crept in during the rewrite, so I don't feel guilty at all :)

Bron ( early adopters find all the cool bugs )

-- 
  Bron Gondwana
  brong at fastmail.fm

-------------- next part --------------
A non-text attachment was scrubbed...
Name: cyrus-appendfrom-bugfix-2.3.10.diff
Type: text/x-patch
Size: 540 bytes
Desc: not available
Url : http://lists.andrew.cmu.edu/pipermail/cyrus-devel/attachments/20071023/6a3608fa/attachment.bin 


More information about the Cyrus-devel mailing list