[FFmpeg-devel] [PATCH] ac3_parser type punning fix

Måns Rullgård mans
Sun Oct 19 12:26:29 CEST 2008


Michael Niedermayer <michaelni at gmx.at> writes:

> On Sat, Oct 18, 2008 at 10:44:16PM -0700, David DeHaven wrote:
>> 
>> > Nothing major, I just applied the same fix that was applied to  
>> > aac_parser.c recently...
>> >
>> > -DrD-
>> > <ac3_parser.patch>
>> 
>> I think there was confusion about the whole point of this patch...
>> 
>> On the four x86 based machine/OS combos I built and tested on (i686-pc- 
>> mingw32, 2x i686-pc-linux, i686-apple-darwin), gcc with optimizations  
>> at more than -O0 would produce machine code that would *only* byteswap  
>> 32 of the 64 bits in the "state" variable passed to both aac_sync and  
>> ac3_sync leading to complete and utter misinterpretation of the header  
>> information. The result: at the *least* would be that it reported the  
>> wrong information to stdout, at worst it would crash due to having the  
>> wrong codec parameters. I can't honestly believe that noone else has  
>> seen this problem, especially considering aac_sync has been already  
>> fixed unless that was simply a "compiler warning" fix.
>> 
>> I can provide disassembly snippets if you need further convincing...
>
> I have no doubt that gcc generates wrong code i also have no doubt that
> the code breaks strict aliassing rules.
> The doubt i have is the relation, so to convince me first tell us if the
> code works with all identical but -fno-strict-aliasing added. If not
> the bug is elsewhere, and this patch is hiding it.

The C code is the same as in aac_parser, and I confirmed it was broken
myself.  IIRC, it is only gcc 4.3 that optimises it "incorrectly".
Scare quotes because the C code is what is incorrect, breaking strict
aliasing rules.  You accepted the same patch for the aac parser
without questions, so why the hesitation now?

-- 
M?ns Rullg?rd
mans at mansr.com




More information about the ffmpeg-devel mailing list