Along the same lines as bug #2175, I got a crash somewhere else in the imap support, for a similar reason. This crash was in imap_expunge_mailbox, inside a loop through idata->ctx->hdrs. For whatever reason, it looks like idata->ctx->msgcount isn't always an accurate count of how many hdrs have been stored in idata->ctx->hdrs. Here's the gdb output: (gdb) bt #0 0x000d009c in imap_expunge_mailbox (idata=0x1143b60) at imap.c:255 #1 0x000dbf04 in imap_cmd_finish (idata=0x1143b60) at command.c:287 #2 0x000dbac4 in imap_cmd_step (idata=0x1143b60) at command.c:187 #3 0x000d7eec in imap_read_headers (idata=0x1143b60, msgbegin=14, msgend=15) at message.c:248 #4 0x000dbeac in imap_cmd_finish (idata=0x1143b60) at command.c:282 #5 0x000d3bfc in imap_check_mailbox (ctx=0x11074e0, index_hint=0xbfffea6c, force=0) at imap.c:1373 #6 0x000668ac in mx_check_mailbox (ctx=0x11074e0, index_hint=0xbfffea6c, lock=0) at mx.c:1366 #7 0x00025afc in mutt_index_menu () at curs_main.c:608 #8 0x00054b58 in main (argc=1, argv=0xbffff478) at main.c:966 (gdb) p h $1 = (HEADER *) 0x0 (gdb) p i $2 = 16 (gdb) p idata->ctx->msgcount $3 = 17 The code right around there looks like this: for (i = 0; i < idata->ctx->msgcount; i++) { h = idata->ctx->hdrs[i]; if (h->index == -1) I think a patch like this would work: --- imap.c 2006-01-17 11:11:56.000000000 -0500 +++ imap-flea.c 2006-02-09 14:37:16.000000000 -0500 @@ -252,7 +252,7 @@ { h = idata->ctx->hdrs[i]; - if (h->index == -1) + if (h && h->index == -1) { dprint (2, (debugfile, "Expunging message UID %d.\n", HEADER_DATA (h)->uid)); But, as is noted in bug #2175, perhaps msgcount MUST always be correct? ~Kyle --Racism is man's greatest threat to man---the maximum of hatred for a minimum of reason.
-- Abraham Joshua Heschel
Attachment:
pgpAnvB59lX4g.pgp
Description: PGP signature