Commit 6c492188 authored by kostya's avatar kostya

Enhance Musepack SV8 probing code

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@19874 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent a6131809
...@@ -53,9 +53,35 @@ typedef struct { ...@@ -53,9 +53,35 @@ typedef struct {
static int mpc8_probe(AVProbeData *p) static int mpc8_probe(AVProbeData *p)
{ {
if (AV_RL32(p->buf) == TAG_MPCK) if (p->buf_size < 16)
return 0;
if (AV_RL32(p->buf) != TAG_MPCK)
return 0;
if (p->buf[4] == 'S' && p->buf[5] == 'H') {
int size = p->buf[6];
if (size < 12 || size > 30)
return 0;
if (!AV_RL32(&p->buf[7])) //zero CRC is invalid
return 0;
//check whether some tag follows stream header or not
if (p->buf[4 + size] < 'A' || p->buf[4 + size] > 'Z')
return 0;
if (p->buf[5 + size] < 'A' || p->buf[5 + size] > 'Z')
return 0;
if (p->buf[6 + size] < 3)
return 0;
return AVPROBE_SCORE_MAX; return AVPROBE_SCORE_MAX;
return 0; }
/* file magic number should be followed by tag name which consists of
two uppercase letters */
if (p->buf[4] < 'A' || p->buf[4] > 'Z' || p->buf[5] < 'A' || p->buf[5] > 'Z')
return 0;
// tag size should be >= 3
if (p->buf[6] < 3)
return 0;
// if first tag is not stream header, that's suspicious
return AVPROBE_SCORE_MAX / 4;
} }
static inline int64_t gb_get_v(GetBitContext *gb) static inline int64_t gb_get_v(GetBitContext *gb)
......
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