[Pkg-mc-devel] Bug#546269: [mc] backtraces for this issue

Mate Miklos mtmkls at freemail.hu
Wed Nov 4 20:45:18 UTC 2009


Package: mc
Version: 2:4.7.0-pre1-3

--- Please enter the report below this line. ---
Hi,

I created files in a directory with this:
----------------8<--------------
#!/usr/bin/perl
#
use strict;
use warnings;

for (1..255) {
    my $name = 'a' x $_;
    system "echo $name> $name";
}
----------------8<--------------

now mc crashes when entering the directory, the backtrace of mc-dbg:
----------------8<--------------
Core was generated by `mc'.
Program terminated with signal 11, Segmentation fault.
#0  0xb7dd9457 in ?? () from /lib/i686/cmov/libc.so.6
(gdb) bt
#0  0xb7dd9457 in ?? () from /lib/i686/cmov/libc.so.6
#1  0xb7ddb07a in malloc () from /lib/i686/cmov/libc.so.6
#2  0xb7ff8144 in g_malloc () from /lib/libglib-2.0.so.0
#3  0xb80128ac in g_strconcat () from /lib/libglib-2.0.so.0
#4  0x08085958 in concat_dir_and_file (dir=0xb806b184 "L`\v", 
    file=0x9167ba3 "aaaaaaaa") at util.c:1180
#5  0x080bb829 in vfs_canon (path=0x9167ba3 "aaaaaaaa") at vfs.c:992
#6  0x080bbfbb in vfs_canon_and_translate (
    path=0x762f696b <Address 0x762f696b out of bounds>) at vfs.c:512
#7  0x080bc07f in mc_lstat (filename=0x9167ba3 "aaaaaaaa", buf=0xbf8b8c54)
    at vfs.c:858
#8  0x0805a637 in handle_dirent (list=0x916ba3c, filter=0x0, dp=0x9167b90, 
    buf1=0xbf8b8c54, next_free=17, link_to_dir=0xbf8b8cb8, 
    stale_link=0xbf8b8cb4) at dir.c:297
#9  0x0805b196 in do_load_dir (path=0x916ba4c "/home/miki/var/mccrash", 
    list=0x916ba3c, sort=0x805b330 <sort_name>, reverse=0, case_sensitive=1, 
    exec_ff=0, filter=0x0) at dir.c:402
#10 0x08072a42 in _do_panel_cd (panel=0x916ba10, 
    new_dir=0x916ae30 "h\256\026\te/miki/var/mccrash/", 'a' <repeats 31 
times>, cd_type=<value optimized out>) at main.c:633
#11 0x08072cfc in do_panel_cd (panel=0x916ba10, 
    new_dir=0x916ae30 "h\256\026\te/miki/var/mccrash/", 'a' <repeats 31 
times>, cd_type=cd_exact) at main.c:656
#12 0x08072d41 in do_cd (
    new_dir=0x916ae30 "h\256\026\te/miki/var/mccrash/", 'a' <repeats 31 
times>, exact=cd_exact) at main.c:665
#13 0x08072e18 in maybe_cd (move_up_dir=0) at main.c:768
#14 0x08059cf2 in dlg_key_event (h=0x9169930, key=405, event=0xbf8b9dd4)
    at dialog.c:673
#15 dlg_process_event (h=0x9169930, key=405, event=0xbf8b9dd4) at dialog.c:776
#16 0x0805a00d in frontend_run_dlg (h=0x9169930) at dialog.c:808
#17 run_dlg (h=0x9169930) at dialog.c:823
#18 0x080720fd in setup_panels_and_run_mc (argc=-1209334800, argv=0xb7eb03f0)
    at main.c:1797
#19 do_nc (argc=-1209334800, argv=0xb7eb03f0) at main.c:1869
#20 main (argc=-1209334800, argv=0xb7eb03f0) at main.c:2359
----------------8<--------------

mc within valgrind -- only starting, changing into the malicious directory, 
and exiting:
----------------8<--------------
==2908== Memcheck, a memory error detector
==2908== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==2908== Using Valgrind-3.5.0-Debian and LibVEX; rerun with -h for copyright 
info
==2908== Command: mc
==2908== 
==2908== Conditional jump or move depends on uninitialised value(s)
==2908==    at 0x400BF88: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40033F2: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4014980: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000C7F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000856: ??? (in /lib/ld-2.10.1.so)
==2908== 
==2908== Conditional jump or move depends on uninitialised value(s)
==2908==    at 0x400A99C: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40033F2: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4014980: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000C7F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000856: ??? (in /lib/ld-2.10.1.so)
==2908== 
==2908== Conditional jump or move depends on uninitialised value(s)
==2908==    at 0x400B83F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40033F2: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4014980: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000C7F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000856: ??? (in /lib/ld-2.10.1.so)
==2908== 
==2908== Conditional jump or move depends on uninitialised value(s)
==2908==    at 0x400A66E: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40032DC: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4014980: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000C7F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000856: ??? (in /lib/ld-2.10.1.so)
==2908== 
==2908== Conditional jump or move depends on uninitialised value(s)
==2908==    at 0x400A676: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40032DC: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4014980: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000C7F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000856: ??? (in /lib/ld-2.10.1.so)
==2908== 
==2908== Conditional jump or move depends on uninitialised value(s)
==2908==    at 0x400A99C: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40032DC: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4014980: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000C7F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4000856: ??? (in /lib/ld-2.10.1.so)
==2908== 
==2908== Invalid read of size 4
==2908==    at 0x4016C13: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4005CE2: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4007644: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x401234F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x430716A: __libc_dlopen_mode (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E10F4: __nss_lookup_function (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E11CB: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==  Address 0x43a6d80 is 32 bytes inside a block of size 34 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x4004AAE: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40078D3: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x401234F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x430716A: __libc_dlopen_mode (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E10F4: __nss_lookup_function (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E11CB: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908== 
==2908== Invalid read of size 4
==2908==    at 0x4016C40: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4005CE2: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4007644: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400D7C6: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400C8EC: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40123AF: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==  Address 0x43a70d0 is 24 bytes inside a block of size 27 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x4004AAE: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40078D3: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400D7C6: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400C8EC: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40123AF: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908== 
==2908== Conditional jump or move depends on uninitialised value(s)
==2908==    at 0x400BF88: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4012492: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x430716A: __libc_dlopen_mode (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E10F4: __nss_lookup_function (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E11CB: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E24AC: __nss_passwd_lookup2 (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x4299925: getpwuid_r (in /lib/i686/cmov/libc-2.10.1.so)
==2908== 
==2908== Conditional jump or move depends on uninitialised value(s)
==2908==    at 0x400A99C: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4012492: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x430716A: __libc_dlopen_mode (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E10F4: __nss_lookup_function (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E11CB: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E24AC: __nss_passwd_lookup2 (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x4299925: getpwuid_r (in /lib/i686/cmov/libc-2.10.1.so)
==2908== 
==2908== Invalid read of size 4
==2908==    at 0x4016C57: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4005CE2: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4007644: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x401234F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x430716A: __libc_dlopen_mode (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E10F4: __nss_lookup_function (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x49A6F3B: ??? (in /lib/i686/cmov/libnss_compat-2.10.1.so)
==2908==  Address 0x43a7794 is 28 bytes inside a block of size 31 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x4004AAE: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40078D3: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x401234F: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x430716A: __libc_dlopen_mode (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x42E10F4: __nss_lookup_function (in 
/lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x49A6F3B: ??? (in /lib/i686/cmov/libnss_compat-2.10.1.so)
==2908== 
==2908== Invalid read of size 4
==2908==    at 0x4016C13: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4005CE2: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4007644: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400D7C6: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400C8EC: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40123AF: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==  Address 0x43a7ae0 is 32 bytes inside a block of size 33 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x4004AAE: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40078D3: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400D7C6: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400C8EC: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x40123AF: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4011D0D: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4306F41: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908==    by 0x400E155: ??? (in /lib/ld-2.10.1.so)
==2908==    by 0x4307040: ??? (in /lib/i686/cmov/libc-2.10.1.so)
==2908== 
==2908== Warning: invalid file descriptor -1 in syscall close()
==2908== Warning: invalid file descriptor -1 in syscall close()
==2908== Invalid write of size 1
==2908==    at 0x40A3A00: g_strlcpy (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x80BD4EC: mc_readdir (vfs.c:809)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==    by 0x8059CF1: dlg_process_event (dialog.c:673)
==2908==    by 0x805A00C: run_dlg (dialog.c:808)
==2908==    by 0x80720FC: main (main.c:1797)
==2908==  Address 0x4516aec is 0 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid read of size 1
==2908==    at 0x4025BC3: strlen (mc_replace_strmem.c:275)
==2908==    by 0x40A589A: g_strconcat (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x8085957: concat_dir_and_file (util.c:1180)
==2908==    by 0x80BB828: vfs_canon (vfs.c:992)
==2908==    by 0x80BBFBA: vfs_canon_and_translate (vfs.c:512)
==2908==    by 0x80BC07E: mc_lstat (vfs.c:858)
==2908==    by 0x805A636: handle_dirent (dir.c:297)
==2908==    by 0x805B195: do_load_dir (dir.c:402)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==  Address 0x4516aec is 0 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid read of size 1
==2908==    at 0x402684D: stpcpy (mc_replace_strmem.c:558)
==2908==    by 0x40A55AB: g_stpcpy (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x40A58DE: g_strconcat (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x8085957: concat_dir_and_file (util.c:1180)
==2908==    by 0x80BB828: vfs_canon (vfs.c:992)
==2908==    by 0x80BBFBA: vfs_canon_and_translate (vfs.c:512)
==2908==    by 0x80BC07E: mc_lstat (vfs.c:858)
==2908==    by 0x805A636: handle_dirent (dir.c:297)
==2908==    by 0x805B195: do_load_dir (dir.c:402)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==  Address 0x4516aec is 0 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid read of size 1
==2908==    at 0x4025BC3: strlen (mc_replace_strmem.c:275)
==2908==    by 0x805B1AD: do_load_dir (dir.c:412)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==    by 0x8059CF1: dlg_process_event (dialog.c:673)
==2908==    by 0x805A00C: run_dlg (dialog.c:808)
==2908==    by 0x80720FC: main (main.c:1797)
==2908==  Address 0x4516aec is 0 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid read of size 1
==2908==    at 0x4025BC3: strlen (mc_replace_strmem.c:275)
==2908==    by 0x40A3BED: g_strdup (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x805B1C7: do_load_dir (dir.c:413)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==    by 0x8059CF1: dlg_process_event (dialog.c:673)
==2908==    by 0x805A00C: run_dlg (dialog.c:808)
==2908==    by 0x80720FC: main (main.c:1797)
==2908==  Address 0x4516aec is 0 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid read of size 1
==2908==    at 0x4026090: memcpy (mc_replace_strmem.c:482)
==2908==    by 0x40A3C0D: g_strdup (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x805B1C7: do_load_dir (dir.c:413)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==    by 0x8059CF1: dlg_process_event (dialog.c:673)
==2908==    by 0x805A00C: run_dlg (dialog.c:808)
==2908==    by 0x80720FC: main (main.c:1797)
==2908==  Address 0x4516af5 is 9 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid read of size 1
==2908==    at 0x4026097: memcpy (mc_replace_strmem.c:482)
==2908==    by 0x40A3C0D: g_strdup (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x805B1C7: do_load_dir (dir.c:413)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==    by 0x8059CF1: dlg_process_event (dialog.c:673)
==2908==    by 0x805A00C: run_dlg (dialog.c:808)
==2908==    by 0x80720FC: main (main.c:1797)
==2908==  Address 0x4516af4 is 8 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid read of size 1
==2908==    at 0x40260A0: memcpy (mc_replace_strmem.c:482)
==2908==    by 0x40A3C0D: g_strdup (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x805B1C7: do_load_dir (dir.c:413)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==    by 0x8059CF1: dlg_process_event (dialog.c:673)
==2908==    by 0x805A00C: run_dlg (dialog.c:808)
==2908==    by 0x80720FC: main (main.c:1797)
==2908==  Address 0x4516af3 is 7 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid read of size 1
==2908==    at 0x40260A9: memcpy (mc_replace_strmem.c:482)
==2908==    by 0x40A3C0D: g_strdup (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x805B1C7: do_load_dir (dir.c:413)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==    by 0x8059CF1: dlg_process_event (dialog.c:673)
==2908==    by 0x805A00C: run_dlg (dialog.c:808)
==2908==    by 0x80720FC: main (main.c:1797)
==2908==  Address 0x4516af2 is 6 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== Invalid write of size 1
==2908==    at 0x40A3A20: g_strlcpy (in /lib/libglib-2.0.so.0.2200.2)
==2908==    by 0x80BD4EC: mc_readdir (vfs.c:809)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x8072A41: _do_panel_cd (main.c:633)
==2908==    by 0x8072CFB: do_panel_cd (main.c:656)
==2908==    by 0x8072D40: do_cd (main.c:665)
==2908==    by 0x8072E17: maybe_cd (main.c:768)
==2908==    by 0x8059CF1: dlg_process_event (dialog.c:673)
==2908==    by 0x805A00C: run_dlg (dialog.c:808)
==2908==    by 0x80720FC: main (main.c:1797)
==2908==  Address 0x4516afa is 14 bytes after a block of size 260 alloc'd
==2908==    at 0x4024C4C: malloc (vg_replace_malloc.c:195)
==2908==    by 0x80BD503: mc_readdir (vfs.c:792)
==2908==    by 0x805B15D: do_load_dir (dir.c:401)
==2908==    by 0x807C75C: panel_new (screen.c:1159)
==2908==    by 0x806D8FC: set_display_type (layout.c:958)
==2908==    by 0x8070225: create_panels (main.c:1101)
==2908==    by 0x8071239: setup_mc (main.c:1432)
==2908==    by 0x8071F26: main (main.c:1868)
==2908== 
==2908== 
==2908== HEAP SUMMARY:
==2908==     in use at exit: 23,510 bytes in 319 blocks
==2908==   total heap usage: 27,978 allocs, 27,659 frees, 1,713,810 bytes 
allocated
==2908== 
==2908== LEAK SUMMARY:
==2908==    definitely lost: 528 bytes in 48 blocks
==2908==    indirectly lost: 435 bytes in 56 blocks
==2908==      possibly lost: 8,734 bytes in 123 blocks
==2908==    still reachable: 13,813 bytes in 92 blocks
==2908==         suppressed: 0 bytes in 0 blocks
==2908== Rerun with --leak-check=full to see details of leaked memory
==2908== 
==2908== For counts of detected and suppressed errors, rerun with: -v
==2908== Use --track-origins=yes to see where uninitialised values come from
==2908== ERROR SUMMARY: 755 errors from 22 contexts (suppressed: 0 from 0)
----------------8<--------------

During experimenting I found a not very reliably producible crash as well: 
sometimes entering into a directory containing long filenames don't crash mc 
immediately, but only upon exiting (even if it already left the malicious 
directory).

backtrace:
----------------8<--------------
#0  0xb80d8424 in __kernel_vsyscall ()
#1  0xb7dd33d0 in raise () from /lib/i686/cmov/libc.so.6
#2  0xb7dd6a85 in abort () from /lib/i686/cmov/libc.so.6
#3  0xb7e0c2ed in ?? () from /lib/i686/cmov/libc.so.6
#4  0xb7e168f4 in ?? () from /lib/i686/cmov/libc.so.6
#5  0xb804bfe6 in g_free () from /lib/libglib-2.0.so.0
#6  0x08073b70 in destroy_menu (menu=0x9) at menu.c:550
#7  0x08070ff3 in done_menu () at main.c:991
#8  0x08071040 in done_mc () at main.c:1534
#9  0x08072133 in do_nc (argc=Cannot access memory at address 0x4457) at 
main.c:1878
#10 main (argc=Cannot access memory at address 0x4457) at main.c:2359
----------------8<--------------

valgrind:
----------------8<--------------
==17610== Memcheck, a memory error detector
==17610== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==17610== Using Valgrind-3.5.0-Debian and LibVEX; rerun with -h for 
copyright info
==17610== Command: mc
==17610==
==17610== Warning: invalid file descriptor -1 in syscall close()
==17610== Warning: invalid file descriptor -1 in syscall close()
==17610==
==17610== HEAP SUMMARY:
==17610==     in use at exit: 34,742 bytes in 375 blocks
==17610==   total heap usage: 26,633 allocs, 26,258 frees, 1,360,640 
bytes allocated
==17610==
==17610== LEAK SUMMARY:
==17610==    definitely lost: 404 bytes in 43 blocks
==17610==    indirectly lost: 315 bytes in 46 blocks
==17610==      possibly lost: 22,886 bytes in 194 blocks
==17610==    still reachable: 11,137 bytes in 92 blocks
==17610==         suppressed: 0 bytes in 0 blocks
==17610== Rerun with --leak-check=full to see details of leaked memory
==17610==
==17610== For counts of detected and suppressed errors, rerun with: -v
==17610== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 47 from 24)
----------------8<--------------

I hope this information is enough for fixing the bug(s).

MM

--- System information. ---
Architecture: i386
Kernel:       Linux 2.6.30-2-686

Debian Release: squeeze/sid
  500 unstable        ftp.uni-kl.de 
  500 unstable        ftp.hu.debian.org 

--- Package information. ---
Depends             (Version) | Installed
=============================-+-=============
libc6                (>= 2.3) | 2.10.1-3
libglib2.0-0      (>= 2.16.0) | 2.22.2-2
libgpm2           (>= 1.20.4) | 1.20.4-3.2
libslang2        (>= 2.0.7-1) | 2.2.1-1


Recommends       (Version) | Installed
==========================-+-===========
imagemagick                | 7:6.5.5.3-1


Suggests          (Version) | Installed
===========================-+-===========
mime-support                | 3.46-1
perl                        | 5.10.1-6
zip                         | 3.0-1
unzip                       | 6.0-1
bzip2                       | 1.0.5-3
links                       | 
 OR w3m                     | 
 OR lynx                    | 2.8.8dev.1-1
arj                         | 
file                        | 5.03-2
xpdf                        | 
dbview                      | 
odt2txt                     | 






More information about the Pkg-mc-devel mailing list