[Ffmpeg-devel] random crashes decoding MP3s

Måns Rullgård mru
Mon Apr 3 14:44:58 CEST 2006


Jacob Meuser said:
> On Mon, Apr 03, 2006 at 08:50:03AM +0100, M?ns Rullg?rd wrote:
>> Jacob Meuser <jakemsr at jakemsr.com> writes:
>>
>> > On Sun, Apr 02, 2006 at 03:09:07AM -0400, Rich Felker wrote:
>> >> On Sat, Apr 01, 2006 at 08:31:43PM -0800, Jacob Meuser wrote:
>> >> > yes, there is no memlign() on OpenBSD.
>> >> >
>> >> > quoting malloc(3)
>> >> >
>> >> >     The allocated space is suitably aligned (after possible
>> >> >     pointer coercion) for storage of any type of object.  If the
>> >> >     space is of pagesize or larger, the memory returned will be
>> >> >     page-aligned.
>> >>
>> >> This text is not meaningful to what we're talking about. ISO C
>> >> requires that the return value of malloc be "suitably aligned for
>> >> storage of any type of object", but "object" is defined as in ISO C,
>> >> and this has nothing to do with the alignment requirements of various
>> >> asm constructs. A true memalign is needed..
>> >
>> > I have always disabled MEMALIGN_HACK and never had any problems.
>>
>> Maybe OpenBSD malloc() aligns more than is required.
>
> not sure what you mean here.

The C standard requires malloc() to return memory suitably aligned for any
data type.  On 32-bit machines the required alignment is usually 32 bits
(or less).  On 64-bit machines it is typically 64 bits for 64-bit data
types.  It is possible that some malloc() implementation always returns
addresses aligned to, e.g., 64 bits even on 32-bit hardware.  IIRC, glibc
malloc() does something like this.

> but anyway, that wouldn't explain why FFmpeg sources from a year ago
> work consistently, but current ones don't.

Indeed.

> it looks like the only change in huffman_decode() that could matter
> was the get_vlc -> get_vlc2 change.  this is consistent with gdb
> giving line 1656 as the crash point, no?
>
> hmmm, that seems to be the problem.  putting the old get_vlc() back
> into bitstream.h and changing the get_vlc2() to get_vlc() on line
> 1653 of mpegaudiodec.c make the crashes stop.

OK, so does get_vlc2() use any mmx/sse instructions, or otherwise do
something that might have stricter alignment requirements than whatever
get_vlc() does?

-- 
M?ns Rullg?rd
mru at inprovide.com





More information about the ffmpeg-devel mailing list