Hi,

I could reproduce it and get a core dump and a backtrace:
(gdb) bt
#0  0xb7be350e in _int_malloc () from /lib/tls/libc.so.6
#1  0xb7be4dfc in malloc () from /lib/tls/libc.so.6
#2  0xb7ba807c in __add_to_environ () from /lib/tls/libc.so.6
#3  0xb7ba8151 in setenv () from /lib/tls/libc.so.6
#4  0x08082ca9 in set_environ (var=0x238 <Address 0x238 out of bounds>,
    value=0x239 <Address 0x239 out of bounds>) at local.c:206
#5  0x08051ddd in set_buffer_environ (buf=0x82a6bb0) at main.c:5595
#6  0x0805832e in main (argc=2, argv=0xbfc0e324, envp=0xbfc0e330) at
    main.c:1125

Unfortunately i could not reproduce the problem when running w3m with gdb
attached :-(

The problematic call seems to be in main.c:5595 (set_buffer_environ):
        set_environ("W3M_CURRENT_WORD", s ? s : "");
                 
Somehow the addresses to "W3M_CURRENT_WORD" (a constant) and s are
changed to some invalid values (0x238 and 0x239) in the call. When i
added a printf("%p %s", s, s); before this call the string s was correct
and the address was something like 0x8334222. Nonetheless the backtrace
looked like above. So something changes addresses at the set_environ
call.

I could reproduce this odd behaviour only with -O2 (the default
optimization flag) to gcc. If compiled with -O0, -O1 or -Os it does not
appear. A test of the single optimization flags which are in
-O2 but not in the other ones might lead to the source of the failure.
Unfortunately I am not eager to do it at the moment.

Regards,
-- 
Karsten Schölzel        | Email:  [EMAIL PROTECTED]
Väderleden 9 4:98       | Jabber: [EMAIL PROTECTED]
97633 Luleå             | VoIP:   sip:[EMAIL PROTECTED]
Sweden                  |         sip:[EMAIL PROTECTED]
                        | Tel:    +4918015855857712


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to