Commit b7e506b3 authored by Michael Niedermayer's avatar Michael Niedermayer

avformat/swfdec: Check frame size rectangle in probe()

fixes probetest failure
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent f7a4589b
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "libavutil/channel_layout.h" #include "libavutil/channel_layout.h"
#include "libavutil/imgutils.h" #include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavcodec/get_bits.h"
#include "swf.h" #include "swf.h"
static const AVCodecTag swf_audio_codec_tags[] = { static const AVCodecTag swf_audio_codec_tags[] = {
...@@ -55,6 +56,9 @@ static int get_swf_tag(AVIOContext *pb, int *len_ptr) ...@@ -55,6 +56,9 @@ static int get_swf_tag(AVIOContext *pb, int *len_ptr)
static int swf_probe(AVProbeData *p) static int swf_probe(AVProbeData *p)
{ {
GetBitContext gb;
int len, xmin, xmax, ymin, ymax;
if(p->buf_size < 15) if(p->buf_size < 15)
return 0; return 0;
...@@ -63,7 +67,20 @@ static int swf_probe(AVProbeData *p) ...@@ -63,7 +67,20 @@ static int swf_probe(AVProbeData *p)
&& AV_RB24(p->buf) != AV_RB24("FWS")) && AV_RB24(p->buf) != AV_RB24("FWS"))
return 0; return 0;
if (p->buf[3] >= 20) init_get_bits8(&gb, p->buf + 3, p->buf_size - 3);
skip_bits(&gb, 40);
len = get_bits(&gb, 5);
if (!len)
return 0;
xmin = get_bits_long(&gb, len);
xmax = get_bits_long(&gb, len);
ymin = get_bits_long(&gb, len);
ymax = get_bits_long(&gb, len);
if (xmin || ymin || !xmax || !ymax)
return 0;
if (p->buf[3] >= 20 || xmax < 16 || ymax < 16)
return AVPROBE_SCORE_MAX / 4; return AVPROBE_SCORE_MAX / 4;
return AVPROBE_SCORE_MAX; return AVPROBE_SCORE_MAX;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment