|
|
@ -7691,12 +7691,12 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
atom.size = INT64_MAX; |
|
|
|
atom.size = INT64_MAX; |
|
|
|
while (total_size <= atom.size - 8 && !avio_feof(pb)) { |
|
|
|
while (total_size <= atom.size - 8 && !avio_feof(pb)) { |
|
|
|
int (*parse)(MOVContext*, AVIOContext*, MOVAtom) = NULL; |
|
|
|
int (*parse)(MOVContext*, AVIOContext*, MOVAtom) = NULL; |
|
|
|
a.size = avio_rb32(pb); |
|
|
|
a.size = avio_rb32(pb); |
|
|
|
a.type = avio_rl32(pb); |
|
|
|
a.type = avio_rl32(pb); |
|
|
|
if (((a.type == MKTAG('f','r','e','e') && c->moov_retry) || |
|
|
|
if (((a.type == MKTAG('f','r','e','e') && c->moov_retry) || |
|
|
|
a.type == MKTAG('h','o','o','v')) && |
|
|
|
a.type == MKTAG('h','o','o','v')) && |
|
|
|
a.size >= 8 && |
|
|
|
a.size >= 8 && |
|
|
|
c->fc->strict_std_compliance < FF_COMPLIANCE_STRICT) { |
|
|
|
c->fc->strict_std_compliance < FF_COMPLIANCE_STRICT) { |
|
|
|
uint32_t type; |
|
|
|
uint32_t type; |
|
|
|
avio_skip(pb, 4); |
|
|
|
avio_skip(pb, 4); |
|
|
|
type = avio_rl32(pb); |
|
|
|
type = avio_rl32(pb); |
|
|
@ -7708,22 +7708,22 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
av_log(c->fc, AV_LOG_ERROR, "Detected moov in a free or hoov atom.\n"); |
|
|
|
av_log(c->fc, AV_LOG_ERROR, "Detected moov in a free or hoov atom.\n"); |
|
|
|
a.type = MKTAG('m','o','o','v'); |
|
|
|
a.type = MKTAG('m','o','o','v'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
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); |
|
|
|
|
|
|
|
c->atom_depth --; |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
if (atom.type != MKTAG('r','o','o','t') && |
|
|
|
} |
|
|
|
atom.type != MKTAG('m','o','o','v')) { |
|
|
|
total_size += 8; |
|
|
|
if (a.type == MKTAG('t','r','a','k') || |
|
|
|
if (a.size == 1 && total_size + 8 <= atom.size) { /* 64 bit extended size */ |
|
|
|
a.type == MKTAG('m','d','a','t')) { |
|
|
|
a.size = avio_rb64(pb) - 8; |
|
|
|
av_log(c->fc, AV_LOG_ERROR, "Broken file, trak/mdat not at top-level\n"); |
|
|
|
|
|
|
|
avio_skip(pb, -8); |
|
|
|
|
|
|
|
c->atom_depth --; |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
total_size += 8; |
|
|
|
total_size += 8; |
|
|
|
if (a.size == 1 && total_size + 8 <= atom.size) { /* 64 bit extended size */ |
|
|
|
} |
|
|
|
a.size = avio_rb64(pb) - 8; |
|
|
|
|
|
|
|
total_size += 8; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
av_log(c->fc, AV_LOG_TRACE, "type:'%s' parent:'%s' sz: %"PRId64" %"PRId64" %"PRId64"\n", |
|
|
|
av_log(c->fc, AV_LOG_TRACE, "type:'%s' parent:'%s' sz: %"PRId64" %"PRId64" %"PRId64"\n", |
|
|
|
av_fourcc2str(a.type), av_fourcc2str(atom.type), a.size, total_size, atom.size); |
|
|
|
av_fourcc2str(a.type), av_fourcc2str(atom.type), a.size, total_size, atom.size); |
|
|
|
if (a.size == 0) { |
|
|
|
if (a.size == 0) { |
|
|
|