[FFmpeg-devel] [PATCH 1/2] AAC: fix strict aliasing violation in parser
Alex Converse
alex.converse
Sun Dec 14 22:43:10 CET 2008
On Sun, Dec 14, 2008 at 3:53 PM, Mans Rullgard <mans at mansr.com> wrote:
> ---
> libavcodec/aac_parser.c | 9 ++++++---
> 1 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/aac_parser.c b/libavcodec/aac_parser.c
> index 1d75e1e..3ff1416 100644
> --- a/libavcodec/aac_parser.c
> +++ b/libavcodec/aac_parser.c
> @@ -32,10 +32,13 @@ static int aac_sync(uint64_t state, AACAC3ParseContext
> *hdr_info,
> {
> GetBitContext bits;
> int size, rdb, ch, sr;
> - uint8_t tmp[8];
> + union {
> + uint64_t u64;
> + uint8_t u8[8];
> + } tmp;
>
> - AV_WB64(tmp, state);
> - init_get_bits(&bits, tmp+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8);
> + tmp.u64 = be2me_64(state);
> + init_get_bits(&bits, tmp.u8+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8);
>
> if(get_bits(&bits, 12) != 0xfff)
> return 0;
>
Is a uint8_t considered a character type? According to the spec character
types can alias any type. The ac3_sync() in the ac3 parser seems to make
that assumption and does not use the union.
--Alex
More information about the ffmpeg-devel
mailing list