Bug#567711: autogen: free(): invalid pointer in testsuite

2010-02-01 Thread Kurt Roeckx
On Sun, Jan 31, 2010 at 02:38:55PM -0800, Bruce Korb wrote:
 
 That value is obtained from ao_string_tokenize( pczOptStr );
 Memory management structures have become corrupt.
 In chasing this a bit, I did discover a bug I introduced:
 This assert became obsolete in longOptionFind():
[...]
 If this fixes the problem, I'll be a happy camper and not chase it any more.  
 :)

That doesn't change anything.

Running this in valgrind shows this:

==6465== Memcheck, a memory error detector
==6465== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==6465== Using Valgrind-3.5.0-Debian and LibVEX; rerun with -h for copyright 
info
==6465== Command: ../rc -t xxx MUMBLE
==6465== 
==6465== Invalid write of size 1
==6465==at 0x4048E8: ao_string_tokenize (tokenize.c:278)
==6465==by 0x40A435: doEnvPresets (environment.c:64)
==6465==by 0x40B680: optionProcess (autoopts.c:907)
==6465==by 0x401DA2: main (rc.c:299)
==6465==  Address 0x5f97069 is 0 bytes after a block of size 41 alloc'd
==6465==at 0x4C221A7: malloc (vg_replace_malloc.c:195)
==6465==by 0x4047B8: ao_malloc (autoopts.c:61)
==6465==by 0x40487C: ao_string_tokenize (tokenize.c:220)
==6465==by 0x40A435: doEnvPresets (environment.c:64)
==6465==by 0x40B680: optionProcess (autoopts.c:907)
==6465==by 0x401DA2: main (rc.c:299)
==6465== 
==6465== Invalid read of size 1
==6465==at 0x4C22ED4: index (mc_replace_strmem.c:141)
==6465==by 0x4038CA: longOptionFind (autoopts.c:266)
==6465==by 0x4040FC: nextOption (autoopts.c:573)
==6465==by 0x404384: doImmediateOpts (autoopts.c:814)
==6465==by 0x40A5F7: doEnvPresets (environment.c:90)
==6465==by 0x40B680: optionProcess (autoopts.c:907)
==6465==by 0x401DA2: main (rc.c:299)
==6465==  Address 0x5f97069 is 0 bytes after a block of size 41 alloc'd
==6465==at 0x4C221A7: malloc (vg_replace_malloc.c:195)
==6465==by 0x4047B8: ao_malloc (autoopts.c:61)
==6465==by 0x40487C: ao_string_tokenize (tokenize.c:220)
==6465==by 0x40A435: doEnvPresets (environment.c:64)
==6465==by 0x40B680: optionProcess (autoopts.c:907)
==6465==by 0x401DA2: main (rc.c:299)
==6465== 
==6465== Invalid read of size 1
==6465==at 0x4C23234: strlen (mc_replace_strmem.c:275)
==6465==by 0x4038F6: longOptionFind (autoopts.c:288)
==6465==by 0x4040FC: nextOption (autoopts.c:573)
==6465==by 0x404384: doImmediateOpts (autoopts.c:814)
==6465==by 0x40A5F7: doEnvPresets (environment.c:90)
==6465==by 0x40B680: optionProcess (autoopts.c:907)
==6465==by 0x401DA2: main (rc.c:299)
==6465==  Address 0x5f97069 is 0 bytes after a block of size 41 alloc'd
==6465==at 0x4C221A7: malloc (vg_replace_malloc.c:195)
==6465==by 0x4047B8: ao_malloc (autoopts.c:61)
==6465==by 0x40487C: ao_string_tokenize (tokenize.c:220)
==6465==by 0x40A435: doEnvPresets (environment.c:64)
==6465==by 0x40B680: optionProcess (autoopts.c:907)
==6465==by 0x401DA2: main (rc.c:299)
==6465== 
==6465== Invalid write of size 1
==6465==at 0x4048E8: ao_string_tokenize (tokenize.c:278)
==6465==by 0x40A435: doEnvPresets (environment.c:64)
==6465==by 0x40B69C: optionProcess (autoopts.c:919)
==6465==by 0x401DA2: main (rc.c:299)
==6465==  Address 0x5f970d9 is 0 bytes after a block of size 41 alloc'd
==6465==at 0x4C221A7: malloc (vg_replace_malloc.c:195)
==6465==by 0x4047B8: ao_malloc (autoopts.c:61)
==6465==by 0x40487C: ao_string_tokenize (tokenize.c:220)
==6465==by 0x40A435: doEnvPresets (environment.c:64)
==6465==by 0x40B69C: optionProcess (autoopts.c:919)
==6465==by 0x401DA2: main (rc.c:299)
==6465== 
==6465== Invalid read of size 1
==6465==at 0x4C22ED4: index (mc_replace_strmem.c:141)
==6465==by 0x4038CA: longOptionFind (autoopts.c:266)
==6465==by 0x4040FC: nextOption (autoopts.c:573)
==6465==by 0x404435: doRegularOpts (autoopts.c:847)
==6465==by 0x40A498: doEnvPresets (environment.c:100)
==6465==by 0x40B69C: optionProcess (autoopts.c:919)
==6465==by 0x401DA2: main (rc.c:299)
==6465==  Address 0x5f970d9 is 0 bytes after a block of size 41 alloc'd
==6465==at 0x4C221A7: malloc (vg_replace_malloc.c:195)
==6465==by 0x4047B8: ao_malloc (autoopts.c:61)
==6465==by 0x40487C: ao_string_tokenize (tokenize.c:220)
==6465==by 0x40A435: doEnvPresets (environment.c:64)
==6465==by 0x40B69C: optionProcess (autoopts.c:919)
==6465==by 0x401DA2: main (rc.c:299)
==6465== 
==6465== Invalid read of size 1
==6465==at 0x4C23234: strlen (mc_replace_strmem.c:275)
==6465==by 0x4038F6: longOptionFind (autoopts.c:288)
==6465==by 0x4040FC: nextOption (autoopts.c:573)
==6465==by 0x404435: doRegularOpts (autoopts.c:847)
==6465==by 0x40A498: doEnvPresets (environment.c:100)
==6465==by 0x40B69C: optionProcess (autoopts.c:919)
==6465==by 0x401DA2: main (rc.c:299)
==6465==  Address 0x5f970d9 is 0 bytes after a block of size 41 alloc'd
==6465==at 0x4C221A7: malloc 

Bug#567711: autogen: free(): invalid pointer in testsuite

2010-01-31 Thread Bruce Korb
Kurt Roeckx wrote:
 When running the regression tests, I rc.test failing.  When running
 TEST_RC=--no-load ../rc -t xxx MUMBLE I get the following error:
 *** glibc detected *** ../rc: free(): invalid pointer: 0x018d4010 ***
 === Backtrace: =
 /lib/libc.so.6[0x7f78a4f64d56]
 ../rc[0x40a4f1]
 ../rc[0x40b6d1]
 ../rc[0x401da3]
 /lib/libc.so.6(__libc_start_main+0xfd)[0x7f78a4f12abd]
 ../rc[0x401cb9]
 === Memory map: 
 [...]
 
 With a core file this looks like:
 #4  0x0040a511 in doPrognameEnv (pOpts=0x613220, type=ENV_IMM)
 at environment.c:106

That value is obtained from ao_string_tokenize( pczOptStr );
Memory management structures have become corrupt.
In chasing this a bit, I did discover a bug I introduced:
This assert became obsolete in longOptionFind():

do  {
if (SKIP_OPT(pOD)) {
if (  (pOD-fOptState != (OPTST_OMITTED | OPTST_NO_INIT))
   || (pOD-pz_Name == NULL))
continue;
}
else assert(pOD-pz_Name != NULL);

It now means that the entry should be ignored.  The correct form is now:

do  {
/*
 *  If option disabled or a doc option, skip to next
 */
if (pOD-pz_Name == NULL)
continue;

if (  SKIP_OPT(pOD)
(pOD-fOptState != (OPTST_OMITTED | OPTST_NO_INIT)))
continue;

If this fixes the problem, I'll be a happy camper and not chase it any more.  :)
Thanks -Bruce



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#567711: autogen: free(): invalid pointer in testsuite

2010-01-30 Thread Kurt Roeckx
Source: autogen
Version: 1:5.10-1

Hi,

When running the regression tests, I rc.test failing.  When running
TEST_RC=--no-load ../rc -t xxx MUMBLE I get the following error:
*** glibc detected *** ../rc: free(): invalid pointer: 0x018d4010 ***
=== Backtrace: =
/lib/libc.so.6[0x7f78a4f64d56]
../rc[0x40a4f1]
../rc[0x40b6d1]
../rc[0x401da3]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f78a4f12abd]
../rc[0x401cb9]
=== Memory map: 
[...]

With a core file this looks like:
#4  0x0040a511 in doPrognameEnv (pOpts=0x613220, type=ENV_IMM)
at environment.c:106
#5  doEnvPresets (pOpts=0x613220, type=ENV_IMM) at environment.c:193
#6  0x0040b6f1 in doPresets (pOpts=0x613220,
argCt=value optimized out, argVect=0x7fff1c0d4e48) at autoopts.c:904
#7  optionProcess (pOpts=0x613220, argCt=value optimized out,
argVect=0x7fff1c0d4e48) at autoopts.c:1110
#8  0x00401dc2 in main (argc=4, argv=0x7fff1c0d4e48) at rc.c:299


You need to set the evironment variable MALLOC_CHECK_ to get glibc
to do that.  (See malloc() manpage.)


Kurt




-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org