Further information on this. I build the lua50 debian packages and imapfilter without dh_strip from the apt-gotten source packages in debian and these are some findings.
On 05/09/05 18:12 +0530, Y Giridhar Appaji Nag - Debian said ... > On 05/09/01 09:35 +0200, Ulf Rompe said ... > > > > imapfilter dies after setting up an imap connection: > > In my case, it dies much before that. Looks like just after initiating > a CAPABILITY transaction. > > I will do some more tests, try and compile with debugging symbols and > run this under gdb to provide more data. S (6): * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE AUTH=PLAIN ACL ACL2=UNION] Courier-IMAP ready. Copyright 1998-2004 Double Precision, Inc. See COPYING for distribution information. C (6): 1000 CAPABILITY *** glibc detected *** corrupted double-linked list: 0x402de218 *** Program received signal SIGABRT, Aborted. 0x401d29e7 in raise () from /lib/tls/libc.so.6 (gdb) bt #0 0x401d29e7 in raise () from /lib/tls/libc.so.6 #1 0x401d431b in abort () from /lib/tls/libc.so.6 #2 0x40209365 in __fsetlocking () from /lib/tls/libc.so.6 #3 0x4020f50c in malloc_usable_size () from /lib/tls/libc.so.6 #4 0x402105ab in free () from /lib/tls/libc.so.6 #5 0x40211901 in calloc () from /lib/tls/libc.so.6 #6 0x40258679 in re_compile_pattern () from /lib/tls/libc.so.6 #7 0x4025bc96 in re_compile_pattern () from /lib/tls/libc.so.6 #8 0x4025ebeb in regexec () from /lib/tls/libc.so.6 #9 0x0804e62a in check_tag () #10 0x0804e812 in response_generic () #11 0x0804e8ea in response_capability () #12 0x0804dbf1 in request_login () #13 0x0804ada4 in ifcore_login () #14 0x40051d41 in luaD_precall (L=0x8083e50, func=0x8082d74) at ldo.c:260 #15 0x4006200a in luaV_execute (L=0x8083e50) at lvm.c:627 #16 0x400522ae in luaD_call (L=0x8083e50, func=0x8082d44, nResults=-1) at ldo.c:313 #17 0x4004c8a6 in f_call (L=0x8083e50, ud=0x0) at lapi.c:672 #18 0x40051923 in luaD_rawrunprotected (L=0x8083e50, f=0x4004c880 <f_call>, ud=0xbffffa74) at ldo.c:88 #19 0x4005290c in luaD_pcall (L=0x8083e50, func=0x4004c880 <f_call>, u=0xbffffa74, old_top=0, ef=0) at ldo.c:416 #20 0x4004dce8 in lua_pcall (L=0x8083e50, nargs=0, nresults=0, errfunc=0) at lapi.c:685 #21 0x0804cfb6 in start_lua () #22 0x0804c91c in main () (gdb) I placed breakpoints at each of the above function calls and ran commands to check for memory corruption at that point using mcheck [snip...] (gdb) b luaD_precall Function "luaD_precall" not defined. Make breakpoint pending on future shared library load? (y or [n]) y Breakpoint 9 (luaD_precall) pending. (gdb) b ifcore_login Breakpoint 10 at 0x804acb8 (gdb) b request_login Breakpoint 11 at 0x804dadb (gdb) b response_capability Breakpoint 12 at 0x804e8db [snip...] Followed by ... [snip...] (gdb) command 9 Type commands for when breakpoint 9 is hit, one per line. End with a line saying just "end". >call mcheck(0) >continue >end (gdb) command 10 Type commands for when breakpoint 10 is hit, one per line. End with a line saying just "end". >call mcheck(0) >continue >end (gdb) command 11 Type commands for when breakpoint 11 is hit, one per line. End with a line saying just "end". >call mcheck(0) >continue >end (gdb) command 12 Type commands for when breakpoint 12 is hit, one per line. End with a line saying just "end". >call mcheck(0) >continue >end [snip...] And ran it again. This is what happens: (gdb) r -v -c ~/.imapfilter/lists.lua [snip...] Breakpoint 24, luaD_precall (L=0x809a420, func=0x80992b0) at ldo.c:223 223 ptrdiff_t funcr = savestack(L, func); $54 = 0 Breakpoint 24, luaD_precall (L=0x809a420, func=0x809928c) at ldo.c:223 223 ptrdiff_t funcr = savestack(L, func); $55 = 0 Breakpoint 10, 0x0804acb8 in ifcore_login () $56 = 0 Breakpoint 11, 0x0804dadb in request_login () $57 = 0 block freed twice Program received signal SIGABRT, Aborted. 0x401d29e7 in raise () from /lib/tls/libc.so.6 (gbd) So looks like there is a double free in request_login. (gdb) l request_login No line number known for request_login. (gdb) f 12 #12 0x0804db93 in request_login () (gdb) l 685 status = luaD_pcall(L, f_call, &c, savestack(L, c.func), func); 686 lua_unlock(L); 687 return status; 688 } 689 690 691 /* 692 ** Execute a protected C call. 693 */ 694 struct CCallS { /* data to `f_Ccall' */ (gdb) But that shows up the last call for which the source was available. I'll try to figure out which package the request_login function is from and then send in more updates. Giridhar -- Y Giridhar Appaji Nag | http://www.appaji.net/ -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]