You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
MOV: bail out to toplevel when encountering a trak or mdat chunk.
This patch fixes the sample from trac issue #733. The issue is that the size of the trak elements is coded too large, so that the next trak element would be parsed as part of the first and truncated incorrectly. Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
This commit is contained in:
@@ -319,6 +319,16 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
|||||||
if (atom.size >= 8) {
|
if (atom.size >= 8) {
|
||||||
a.size = avio_rb32(pb);
|
a.size = avio_rb32(pb);
|
||||||
a.type = avio_rl32(pb);
|
a.type = avio_rl32(pb);
|
||||||
|
if (atom.type != MKTAG('r','o','o','t') &&
|
||||||
|
atom.type != MKTAG('m','o','o','v'))
|
||||||
|
{
|
||||||
|
if (a.type == MKTAG('t','r','a','k') || a.type == MKTAG('m','d','a','t'))
|
||||||
|
{
|
||||||
|
av_log(c->fc, AV_LOG_ERROR, "Broken file, trak/mdat not at top-level\n");
|
||||||
|
avio_skip(pb, -8);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
total_size += 8;
|
total_size += 8;
|
||||||
if (a.size == 1) { /* 64 bit extended size */
|
if (a.size == 1) { /* 64 bit extended size */
|
||||||
a.size = avio_rb64(pb) - 8;
|
a.size = avio_rb64(pb) - 8;
|
||||||
|
Reference in New Issue
Block a user