Bron Gondwana wrote: > Wow, this is the thanks I get for doing sanity checks on files, find more bugs! > > This one is due to delayed expunge, plain and simple. Cyrus decides what cache > records to copy during an IMAP COPY command by reading the cache offsets for > msgno and msgno+1 (or the end of the cache file if it's the last msgno). > > Obviously if some intervening messages have already been deleted from the > cyrus.index then it will be copying all those cache records as well to the > destination folder. Oops. > > The attached patch reworks mailbox_cache_size into two functions, the second > being mailbox_cache_size_detail that takes memory locations for the cache mmap > rather than a mailbox object (because imapd doesn't update the locations in > the object correctly according to my testing, *sigh*. Gotta love global > variables) > > It then uses mailbox_cache_size_detail to calculate the ACTUAL record length > for this single cache item rather than blindly copying everything up to the > next index record's pointer. > > Also note: in the event of cache corruption, mailbox_cache_size_detail returns > zero bytes, which correctly makes append_copy re-parse the message file. It's > all shiny :) > > Wes/Ken - please apply to CVS :) > > Thanks, > > Bron. I was wondering if this bug would account for the behaviour that I am seeing. I am getting corrupt cyrus.expunge files that are causing unexepunge to segfault. Looking at the metadata I have noticed that I am getting NEW files for expunge,index, and cache on affected mail boxes. [root@student2 boutilpj]# find -name \*.NEW\* ./RSS Feeds/KDE-Apps-org Content/cyrus.expunge.NEW ./RSS Feeds/KDE-Apps-org Content/cyrus.index.NEW ./RSS Feeds/KDE-Apps-org Content/cyrus.cache.NEW ./RSS Feeds/Secunia - Latest Secunia Security Advisories/cyrus.expunge.NEW ./RSS Feeds/Secunia - Latest Secunia Security Advisories/cyrus.index.NEW ./RSS Feeds/Secunia - Latest Secunia Security Advisories/cyrus.cache.NEW ./RSS Feeds/Linux Today/cyrus.expunge.NEW ./RSS Feeds/Linux Today/cyrus.index.NEW ./RSS Feeds/Linux Today/cyrus.cache.NEW ./RSS Feeds/Slashdot/cyrus.expunge.NEW ./RSS Feeds/Slashdot/cyrus.index.NEW ./RSS Feeds/Slashdot/cyrus.cache.NEW ./RSS Feeds/Freshmeat/cyrus.expunge.NEW ./RSS Feeds/Freshmeat/cyrus.index.NEW ./RSS Feeds/Freshmeat/cyrus.cache.NEW ./cyrus.expunge.NEW ./Mailing Lists/IMP/cyrus.expunge.NEW ./Mailing Lists/IMP/cyrus.index.NEW ./Mailing Lists/IMP/cyrus.cache.NEW ./cyrus.cache.NEW > > > ------------------------------------------------------------------------ > > ---- > Cyrus Home Page: http://cyrusimap.web.cmu.edu/ > Cyrus Wiki/FAQ: http://cyrusimap.web.cmu.edu/twiki > List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html ---- Cyrus Home Page: http://cyrusimap.web.cmu.edu/ Cyrus Wiki/FAQ: http://cyrusimap.web.cmu.edu/twiki List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html