On Tue, 12 Jun 2018, Michael Niedermayer wrote:

On Tue, Jun 12, 2018 at 10:47:24AM +0200, Marton Balint wrote:


On Tue, 12 Jun 2018, Michael Niedermayer wrote:

On Sun, Jun 10, 2018 at 12:36:47PM +0200, Marton Balint wrote:
Also use common code with opAtom.

Fixes ticket #2776.
Partially fixes ticket #5671.
Fixes ticket #5866.

Signed-off-by: Marton Balint <c...@passwd.hu>
---
libavformat/mxfdec.c | 281 ++++++++++++++++++++++++---------------------------
1 file changed, 130 insertions(+), 151 deletions(-)

causes a segfault:

==23735== Invalid read of size 8
==23735==    at 0x75A627: mxf_set_pts (mxfdec.c:3277)
==23735==    by 0x75ACAD: mxf_read_packet_old (mxfdec.c:3396)
==23735==    by 0x7E099D: ff_read_packet (utils.c:856)
==23735==    by 0x7E39FF: read_frame_internal (utils.c:1581)
==23735==    by 0x7EB82B: avformat_find_stream_info (utils.c:3773)
==23735==    by 0x415534: open_input_file (ffmpeg_opt.c:1091)
==23735==    by 0x41EB11: open_files (ffmpeg_opt.c:3206)
==23735==    by 0x41ECA3: ffmpeg_parse_options (ffmpeg_opt.c:3246)
==23735==    by 0x43D1A3: main (ffmpeg.c:4832)
==23735==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==23735==
==23735==
==23735== Process terminating with default action of signal 11 (SIGSEGV)
==23735==  Access not within mapped region at address 0x0
==23735==    at 0x75A627: mxf_set_pts (mxfdec.c:3277)
==23735==    by 0x75ACAD: mxf_read_packet_old (mxfdec.c:3396)
==23735==    by 0x7E099D: ff_read_packet (utils.c:856)
==23735==    by 0x7E39FF: read_frame_internal (utils.c:1581)
==23735==    by 0x7EB82B: avformat_find_stream_info (utils.c:3773)
==23735==    by 0x415534: open_input_file (ffmpeg_opt.c:1091)
==23735==    by 0x41EB11: open_files (ffmpeg_opt.c:3206)
==23735==    by 0x41ECA3: ffmpeg_parse_options (ffmpeg_opt.c:3246)
==23735==    by 0x43D1A3: main (ffmpeg.c:4832)
==23735==  If you believe this happened as a result of a stack
==23735==  overflow in your program's main thread (unlikely but
==23735==  possible), you can try to increase the size of the
==23735==  main thread stack using the --main-stacksize= flag.
==23735==  The main thread stack size used in this run was 8388608.

I don't see this. What is your command line?

testcase sent privatly

index_table->nb_ptses was negative, but that did not cause problems before the patch, because the comparison to nb_ptses was signed, after the patch it became unsigned.

It is better to explicitly disallow a negative nb_ptses, please apply the attached patch before this one, you should be good.

Thanks,
Marton
From c3f9e8442fe66f474466d769f44f782532eacb82 Mon Sep 17 00:00:00 2001
From: Marton Balint <c...@passwd.hu>
Date: Tue, 12 Jun 2018 23:42:16 +0200
Subject: [PATCH] avformat/mxfdec: avoid index_table->nb_ptses overflow in
 mxf_compute_ptses_fake_index

Signed-off-by: Marton Balint <c...@passwd.hu>
---
 libavformat/mxfdec.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 32ca9e0f99..b2930087ab 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -1528,6 +1528,12 @@ static int mxf_compute_ptses_fake_index(MXFContext *mxf, MXFIndexTable *index_ta
             return 0;                               /* no TemporalOffsets */
         }
 
+        if (s->index_duration > INT_MAX - index_table->nb_ptses) {
+            index_table->nb_ptses = 0;
+            av_log(mxf->fc, AV_LOG_ERROR, "ignoring IndexSID %d, duration is too large\n", s->index_sid);
+            return 0;
+        }
+
         index_table->nb_ptses += s->index_duration;
     }
 
-- 
2.16.4

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to