avformat/mov: Factorize sanity check out

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
(cherry picked from commit 16b3d3e3eb)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
release/7.1
Michael Niedermayer 2 months ago
parent 5e02e1ba96
commit 41f8052284
No known key found for this signature in database
GPG Key ID: B18E8928B3948D64
  1. 34
      libavformat/mov.c

@ -5021,6 +5021,24 @@ static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
}
#endif
static int sanity_checks(void *log_obj, MOVStreamContext *sc, int index)
{
if ((sc->chunk_count && (!sc->stts_count || !sc->stsc_count ||
(!sc->sample_size && !sc->sample_count))) ||
(!sc->chunk_count && sc->sample_count)) {
av_log(log_obj, AV_LOG_ERROR, "stream %d, missing mandatory atoms, broken header\n",
index);
return 1;
}
if (sc->stsc_count && sc->stsc_data[ sc->stsc_count - 1 ].first > sc->chunk_count) {
av_log(log_obj, AV_LOG_ERROR, "stream %d, contradictionary STSC and STCO\n",
index);
return 2;
}
return 0;
}
static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{
AVStream *st;
@ -5053,19 +5071,9 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
av_freep(&sc->stsc_data);
}
/* sanity checks */
if ((sc->chunk_count && (!sc->stts_count || !sc->stsc_count ||
(!sc->sample_size && !sc->sample_count))) ||
(!sc->chunk_count && sc->sample_count)) {
av_log(c->fc, AV_LOG_ERROR, "stream %d, missing mandatory atoms, broken header\n",
st->index);
return 0;
}
if (sc->stsc_count && sc->stsc_data[ sc->stsc_count - 1 ].first > sc->chunk_count) {
av_log(c->fc, AV_LOG_ERROR, "stream %d, contradictionary STSC and STCO\n",
st->index);
return AVERROR_INVALIDDATA;
}
ret = sanity_checks(c->fc, sc, st->index);
if (ret)
return ret > 1 ? AVERROR_INVALIDDATA : 0;
fix_timescale(c, sc);

Loading…
Cancel
Save