v2.3.6 message delete causes signal 10
Ken Murchison
murch at andrew.cmu.edu
Fri Jun 30 15:01:03 EDT 2006
Andrew Findlay wrote:
> On Fri, May 26, 2006 at 12:11:05PM -0400, Ken Murchison wrote:
>
>>> Cyrus IMAP v2.3.3 (with sasl v2.1.21) ran fine. Any ideas?
>> Can you get a backtrace from a core dump?
>
> I have a similar problem using 2.3.6 murder on CentOS 4.3 (very like
> RHEL 4) on 32-bit x86.
>
> In my case it is the front-end imap proxyd that crashes and the
> signal is 11 (SIGSEGV) but the case seems very similar: it happens
> when deleting messages and the traceback shows prot_printf() as the
> active function.
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread -1208183104 (LWP 22222)]
> 0x0809462c in prot_printf (s=0x8312250, fmt=0x80aa579 " %s ") at prot.c:960
> 960 prot.c: No such file or directory.
> in prot.c
> (gdb) where
> #0 0x0809462c in prot_printf (s=0x8312250, fmt=0x80aa579 " %s ") at prot.c:960
> #1 0x0805124b in cmd_store (tag=0x83126a8 "a0008", sequence=0x8312788 "8", usinguid=1)
> at imapd.c:4169
> #2 0x0805f53b in cmdloop () at imapd.c:1640
> #3 0x08060687 in service_main (argc=1, argv=0x8308008, envp=0xbff0b8ac) at imapd.c:789
> #4 0x0804c545 in main (argc=1, argv=0xbff0b8a4, envp=0xbff0b8ac) at service.c:532
> (gdb) up
> #1 0x0805124b in cmd_store (tag=0x83126a8 "a0008", sequence=0x8312788 "8", usinguid=1)
> at imapd.c:4169
> 4169 imapd.c: No such file or directory.
> in imapd.c
> (gdb) print tag
> $1 = 0x83126a8 "a0008"
> (gdb) print operation
> $2 = {s = 0x0, len = 0, alloc = 0}
> (gdb) print &operation
> $3 = (struct buf *) 0x8135d20
> (gdb) print tag
> $4 = 0x83126a8 "a0008"
> (gdb) print cmd
> $5 = 0x80aa558 "UID Store"
> (gdb) print sequence
> $6 = 0x8312788 "8"
> (gdb) print operation
> $7 = {s = 0x0, len = 0, alloc = 0}
>
> I think the problem is the last parameter to the prot_printf call:
> in cmd_store() the call looks like this:
>
> if (backend_current) {
> /* remote mailbox */
> prot_printf(backend_current->out, "%s %s %s %s ",
> tag, cmd, sequence, operation);
> pipe_command(backend_current, 65536);
> return;
> }
>
> 'operation' is declared as:
>
> static struct buf operation, flagname;
>
> but it is not assigned a value before prot_printf() is called so
> when prot_printf() tries to do strlen() it gets SEGV.
OK. I see the problem, I just need to come up with a fix.
> I am not sure what is intended here, nor am I sure why we are doing
> a STORE operation in the first place!
Remember that IMAP uses a DELETE+EXPUNGE model. So, first the message
is marked as deleted (by STOREing the \Deleted flag), and then
eventually \Deleted messages are EXPUNGEd.
--
Kenneth Murchison
Systems Programmer
Project Cyrus Developer/Maintainer
Carnegie Mellon University
More information about the Info-cyrus
mailing list