Mercurial > libavformat.hg
changeset 5181:c900e8690782 libavformat
Check the index validity more thoroughly for the c93 probe function.
In particular, check that length of the first index entries is not 0 since
that is interpreted "end of file" and makes no sense in the very first entries.
author | reimar |
---|---|
date | Mon, 14 Sep 2009 20:01:32 +0000 |
parents | a026efc0ca86 |
children | 34ec401808a8 |
files | c93.c |
diffstat | 1 files changed, 11 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/c93.c Mon Sep 14 19:58:51 2009 +0000 +++ b/c93.c Mon Sep 14 20:01:32 2009 +0000 @@ -21,6 +21,7 @@ #include "avformat.h" #include "voc.h" +#include "libavutil/intreadwrite.h" typedef struct { uint16_t index; @@ -43,13 +44,16 @@ static int probe(AVProbeData *p) { - if (p->buf[0] == 0x01 && p->buf[1] == 0x00 && - p->buf[4] == 0x01 + p->buf[2] && - p->buf[8] == p->buf[4] + p->buf[6] && - p->buf[12] == p->buf[8] + p->buf[10]) - return AVPROBE_SCORE_MAX; - - return 0; + int i; + int index = 1; + if (p->buf_size < 16) + return 0; + for (i = 0; i < 16; i += 4) { + if (AV_RL16(p->buf + i) != index || !p->buf[i + 2] || !p->buf[i + 3]) + return 0; + index += p->buf[i + 2]; + } + return AVPROBE_SCORE_MAX; } static int read_header(AVFormatContext *s,