Add more sanity checks for header elements, rejecting files with clearly
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Mon, 14 Sep 2009 19:58:51 +0000 (19:58 +0000)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Mon, 14 Sep 2009 19:58:51 +0000 (19:58 +0000)
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

libavformat/xa.c

index 2f54710..fedc2f2 100644 (file)
@@ -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)) {
     case XA00_TAG:
     case XAI0_TAG:
     case XAJ0_TAG:
     switch(AV_RL32(p->buf)) {
     case XA00_TAG:
     case XAI0_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,