Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Apr 2004 22:28:55 -0700
From:      "Michael C. Shultz" <ringworm@inbox.lv>
To:        freebsd-ports@freebsd.org
Subject:   Re: devel/libidn: warning when freeing memory
Message-ID:  <200404182228.55828.ringworm@inbox.lv>
In-Reply-To: <86u0zgipdr.fsf@comcast.net>
References:  <86u0zgipdr.fsf@comcast.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 18 April 2004 09:05 pm, Kaarthik Sivakumar wrote:
> When idn is run, it prints the following message for any string given
> to it:
>
>   idn in free(): error: junk pointer, too high to make sense
>
> After setting MALLOC_OPTIONS to A and compiling libidn with '-g', I
> got the following backtrace:
>
> ,----
>
> | (gdb) run
> | Starting program: /usr/home/programs/libidn-0.4.2/src/.libs/idn
> | libidn 0.4.2
> | Copyright 2002, 2003, 2004 Simon Josefsson.
> | GNU Libidn comes with NO WARRANTY, to the extent permitted by law.
> | You may redistribute copies of GNU Libidn under the terms of
> | the GNU Lesser General Public License.  For more information
> | about these matters, see the file named COPYING.LIB.
> | Type each input string on a line by itself, terminated by a newline
> | character. test this string
> | idn in free(): error: junk pointer, too high to make sense
> |
> | Program received signal SIGABRT, Aborted.
> | 0x281f1d4f in kill () from /lib/libc.so.5
> | (gdb) bt
> | #0  0x281f1d4f in kill () from /lib/libc.so.5
> | #1  0x281e67f8 in raise () from /lib/libc.so.5
> | #2  0x2825ef02 in abort () from /lib/libc.so.5
> | #3  0x2825d67e in tcflow () from /lib/libc.so.5
> | #4  0x2825d6ab in tcflow () from /lib/libc.so.5
> | #5  0x2825e1d8 in tcflow () from /lib/libc.so.5
> | #6  0x2825e420 in free () from /lib/libc.so.5
> | #7  0x08049c1f in main (argc=1, argv=0xbfbfe9f0) at idn.c:381
> | #8  0x08048c62 in _start ()
> | (gdb) fr 7
> | #7  0x08049c1f in main (argc=1, argv=0xbfbfe9f0) at idn.c:381
> | 381                   free (r);
> | (gdb) l
> | 376                                argv[0], rc);
> | 377                       free (q);
> | 378                       return 1;
> | 379                     }
> | 380
> | 381                   free (r);
> | 382                 }
> | 383     #endif
> | 384
> | 385               if (args_info.debug_given)
> | (gdb) p r
> | $1 = 0x6f732e <Error reading address 0x6f732e: Bad address>
> | (gdb)
>
> `----
>
> I tried debugging but I couldnt figure out what was wrong. The address
> seems low for stack addresses, but it is obviously high for a heap
> address.
>
> Thanks
>
> kaarthik
>
>
> _______________________________________________
> freebsd-ports@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-ports
> To unsubscribe, send any mail to "freebsd-ports-unsubscribe@freebsd.org"

The error comes from freeing something that isn't allocated. You don't have 
enough information here to find the problem. Where was "r" and "q" malloc'ed?  
Are either of them being freed more than once? Did one of them get their 
address reassigned? A quick thing you can do is comment out the free's, if 
the problem goes away then you'll know which variable is the culprit.

-Mike



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404182228.55828.ringworm>