Fixes Ticket4040 Signed-off-by: Michael Niedermayer <michae...@gmx.at> --- libavformat/mxfdec.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index b01dd0c..a1abc34 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -2211,6 +2211,13 @@ end: avio_seek(s->pb, mxf->run_in, SEEK_SET); } +static uint64_t loop_detection_state(AVFormatContext *s) +{ + MXFContext *mxf = s->priv_data; + + return avio_tell(s->pb) + 0xA987654321*!mxf->current_partition; +} + static int mxf_read_header(AVFormatContext *s) { MXFContext *mxf = s->priv_data; @@ -2235,12 +2242,12 @@ static int mxf_read_header(AVFormatContext *s) while (!avio_feof(s->pb)) { const MXFMetadataReadTableEntry *metadata; - if (avio_tell(s->pb) == last_pos) { + if (loop_detection_state(s) == last_pos) { av_log(mxf->fc, AV_LOG_ERROR, "MXF structure loop detected\n"); return AVERROR_INVALIDDATA; } if ((1ULL<<61) % last_pos_index++ == 0) - last_pos = avio_tell(s->pb); + last_pos = loop_detection_state(s); if (klv_read_packet(&klv, s->pb) < 0) { /* EOF - seek to previous partition or stop */ if(mxf_parse_handle_partition_or_eof(mxf) <= 0) -- 1.7.9.5 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel