mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-26 00:31:12 +00:00
Add more sanity checks for header elements, rejecting files with clearly
invalid values that wouldn't play right anyway and reduce probe score to MAX/2. Passes probetest v2. Originally committed as revision 19842 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
e4c01d408a
commit
ddbb7c9be2
@ -42,13 +42,24 @@ typedef struct MaxisXADemuxContext {
|
|||||||
|
|
||||||
static int xa_probe(AVProbeData *p)
|
static int xa_probe(AVProbeData *p)
|
||||||
{
|
{
|
||||||
|
int channels, srate, bits_per_sample;
|
||||||
|
if (p->buf_size < 24)
|
||||||
|
return 0;
|
||||||
switch(AV_RL32(p->buf)) {
|
switch(AV_RL32(p->buf)) {
|
||||||
case XA00_TAG:
|
case XA00_TAG:
|
||||||
case XAI0_TAG:
|
case XAI0_TAG:
|
||||||
case XAJ0_TAG:
|
case XAJ0_TAG:
|
||||||
return AVPROBE_SCORE_MAX;
|
break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
channels = AV_RL16(p->buf + 10);
|
||||||
|
srate = AV_RL32(p->buf + 12);
|
||||||
|
bits_per_sample = AV_RL16(p->buf + 22);
|
||||||
|
if (!channels || channels > 8 || !srate || srate > 192000 ||
|
||||||
|
bits_per_sample < 4 || bits_per_sample > 32)
|
||||||
|
return 0;
|
||||||
|
return AVPROBE_SCORE_MAX/2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int xa_read_header(AVFormatContext *s,
|
static int xa_read_header(AVFormatContext *s,
|
||||||
|
Loading…
Reference in New Issue
Block a user