avformat/mov: check that pcmC box is of the expected type

As per 23003-5:2020 this box is defined as
PCMConfig extends FullBox(‘pcmC’, version = 0, 0), which means
that version is 0 and flags should be zero.
This commit is contained in:
Jan Ekström 2023-02-04 21:21:10 +02:00
parent ad17e29224
commit adca877acb
1 changed files with 11 additions and 2 deletions

View File

@ -1590,14 +1590,23 @@ static int mov_read_enda(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{
int format_flags;
int version, flags;
if (atom.size < 6) {
av_log(c->fc, AV_LOG_ERROR, "Empty pcmC box\n");
return AVERROR_INVALIDDATA;
}
avio_r8(pb); // version
avio_rb24(pb); // flags
version = avio_r8(pb);
flags = avio_rb24(pb);
if (version != 0 || flags != 0) {
av_log(c->fc, AV_LOG_ERROR,
"Unsupported 'pcmC' box with version %d, flags: %x",
version, flags);
return AVERROR_INVALIDDATA;
}
format_flags = avio_r8(pb);
if (format_flags == 1) // indicates little-endian format. If not present, big-endian format is used
set_last_stream_little_endian(c->fc);