summaryrefslogtreecommitdiff
path: root/libavformat/cafdec.c
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-07-09 14:10:52 -0400
committerJustin Ruggles <justin.ruggles@gmail.com>2012-07-19 13:26:45 -0400
commitf5a9c35f886508b851011b7dd4ec18cc67b57d37 (patch)
tree7f48a5bdf6b3b9b43d39a3ed2de159cf1dde1b5d /libavformat/cafdec.c
parentb0b77b9ca572ed95bf24c222931f5f3da8982b89 (diff)
caf: fix 'pakt' chunk parsing
according to the CAF specification: "... the value for mChunkSize can be greater than the actual valid content of the packet table chunk"
Diffstat (limited to 'libavformat/cafdec.c')
-rw-r--r--libavformat/cafdec.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c
index 4a04cb0b05..90e97a10bd 100644
--- a/libavformat/cafdec.c
+++ b/libavformat/cafdec.c
@@ -192,10 +192,11 @@ static int read_pakt_chunk(AVFormatContext *s, int64_t size)
st->duration += caf->frames_per_packet ? caf->frames_per_packet : ff_mp4_read_descr_len(pb);
}
- if (avio_tell(pb) - ccount != size) {
+ if (avio_tell(pb) - ccount > size) {
av_log(s, AV_LOG_ERROR, "error reading packet table\n");
- return -1;
+ return AVERROR_INVALIDDATA;
}
+ avio_skip(pb, ccount + size - avio_tell(pb));
caf->num_bytes = pos;
return 0;