Enhance Musepack SV8 probing code

Originally committed as revision 19874 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Kostya Shishkov 2009-09-16 04:43:33 +00:00
parent e458dd0be0
commit 9117213313

View File

@ -53,9 +53,35 @@ typedef struct {
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 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)