diff options
author | Tomas Härdin <tomas.hardin@codemill.se> | 2011-12-20 18:11:10 +0100 |
---|---|---|
committer | Tomas Härdin <tomas.hardin@codemill.se> | 2011-12-21 14:16:03 +0100 |
commit | 184f479096dabcb1eafd9c661304f410a76780ed (patch) | |
tree | 6634abd302fcc0d8899784875b80e1a86b383b85 /libavformat/mxfdec.c | |
parent | 4ae7d4517048fb5ba64069ad332c2a555d86a8e0 (diff) | |
download | ffmpeg-184f479096dabcb1eafd9c661304f410a76780ed.tar.gz |
mxfdec: Move the current_partition check inside mxf_read_header()
This fixes SIGSEGV on files where this is actually the case, such as zzuf4.mxf
Diffstat (limited to 'libavformat/mxfdec.c')
-rw-r--r-- | libavformat/mxfdec.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 4a49907a69..5035a2fc2b 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -1500,11 +1500,6 @@ static int mxf_parse_handle_essence(MXFContext *mxf) AVIOContext *pb = mxf->fc->pb; int64_t ret; - if (!mxf->current_partition) { - av_log(mxf->fc, AV_LOG_ERROR, "found essence prior to PartitionPack\n"); - return AVERROR_INVALIDDATA; - } - if (mxf->parsing_backward) { return mxf_seek_to_previous_partition(mxf); } else { @@ -1620,6 +1615,12 @@ static int mxf_read_header(AVFormatContext *s, AVFormatParameters *ap) IS_KLV_KEY(klv.key, mxf_essence_element_key) || IS_KLV_KEY(klv.key, mxf_avid_essence_element_key) || IS_KLV_KEY(klv.key, mxf_system_item_key)) { + + if (!mxf->current_partition) { + av_log(mxf->fc, AV_LOG_ERROR, "found essence prior to first PartitionPack\n"); + return AVERROR_INVALIDDATA; + } + if (!mxf->current_partition->essence_offset) { /* for OP1a we compute essence_offset * for OPAtom we point essence_offset after the KL (usually op1a_essence_offset + 20 or 25) |