avformat/avidec: ensure that palette does not contain the BottomUp info.
authorBenoit Fouet <benoit.fouet@free.fr>
Mon, 22 Sep 2014 07:57:37 +0000 (09:57 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 22 Sep 2014 09:01:27 +0000 (11:01 +0200)
Considering the palette is located at the end of extradata may be flawed
when the extradata contains the palette followed by the BottomUp field.
When the BottomUp field is present, exclude it from the palette.
Fixes part of ticket #1304

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/avidec.c

index 5b260e254286911c288188ede56cfa449c101bbe..f7b15b77a59a908a80a046edb917b6fccae93e7a 100644 (file)
@@ -756,6 +756,10 @@ static int avi_read_header(AVFormatContext *s)
                         pal_size = FFMIN(pal_size, st->codec->extradata_size);
                         pal_src  = st->codec->extradata +
                                    st->codec->extradata_size - pal_size;
+                        /* Exclude the "BottomUp" field from the palette */
+                        if (pal_src - st->codec->extradata >= 9 &&
+                            !memcmp(st->codec->extradata + st->codec->extradata_size - 9, "BottomUp", 9))
+                            pal_src -= 9;
                         for (i = 0; i < pal_size / 4; i++)
                             ast->pal[i] = 0xFFU<<24 | AV_RL32(pal_src+4*i);
                         ast->has_pal = 1;