diff mbox

[FFmpeg-devel] Fix memset size on ctts_data in mov_read_trun()

Message ID CAF1j9YNW370Fi6VkhTVNBcR+Lst-B62W6eRpuCa9-U28fNMMzQ@mail.gmail.com
State Superseded
Headers show

Commit Message

Xiaohan Wang (王消寒) Feb. 15, 2018, 8:10 p.m. UTC

Comments

Michael Niedermayer Feb. 16, 2018, 8:30 p.m. UTC | #1
On Thu, Feb 15, 2018 at 12:10:33PM -0800, Xiaohan Wang (王消寒) wrote:
> 

>  mov.c |    3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 5597d0b095f8b15eb11503010a51c2bc2c022413  0001-ffmpeg-Fix-memset-size-on-ctts_data-in-mov_read_trun.patch
> From 7c1e6b50ebe35b2a38c4f1d0a988e31eccbd0ead Mon Sep 17 00:00:00 2001
> From: Xiaohan Wang <xhwang@chromium.org>
> Date: Thu, 15 Feb 2018 12:05:53 -0800
> Subject: [PATCH] ffmpeg: Fix memset size on ctts_data in mov_read_trun()
> 
> The allocated size of sc->ctts_data is
> (st->nb_index_entries + entries) * sizeof(*sc->ctts_data).
> 
> The size to memset at offset sc->ctts_data + sc->ctts_count should be
> (st->nb_index_entries + entries - sc->ctts_count) * sizeof(*sc->ctts_data))
> 
> The current code missed |entries| I believe.

shouldnt "entries" be read by this function later and so shouldnt need a 
memset?
I didnt write this, but it looks a bit to me as if it was intended to only
clear the area that would not be read later

[...]
Xiaohan Wang (王消寒) Feb. 16, 2018, 10:42 p.m. UTC | #2
+jstebbins@ who wrote that code.

On Fri, Feb 16, 2018 at 12:30 PM, Michael Niedermayer <
michael@niedermayer.cc> wrote:

> On Thu, Feb 15, 2018 at 12:10:33PM -0800, Xiaohan Wang (王消寒) wrote:
> >
>
> >  mov.c |    3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 5597d0b095f8b15eb11503010a51c2bc2c022413  0001-ffmpeg-Fix-memset-size-
> on-ctts_data-in-mov_read_trun.patch
> > From 7c1e6b50ebe35b2a38c4f1d0a988e31eccbd0ead Mon Sep 17 00:00:00 2001
> > From: Xiaohan Wang <xhwang@chromium.org>
> > Date: Thu, 15 Feb 2018 12:05:53 -0800
> > Subject: [PATCH] ffmpeg: Fix memset size on ctts_data in mov_read_trun()
> >
> > The allocated size of sc->ctts_data is
> > (st->nb_index_entries + entries) * sizeof(*sc->ctts_data).
> >
> > The size to memset at offset sc->ctts_data + sc->ctts_count should be
> > (st->nb_index_entries + entries - sc->ctts_count) *
> sizeof(*sc->ctts_data))
> >
> > The current code missed |entries| I believe.
>
> shouldnt "entries" be read by this function later and so shouldnt need a
> memset?
> I didnt write this, but it looks a bit to me as if it was intended to only
> clear the area that would not be read later
>

I thought we only had sc->ctts_count entries before av_fast_realloc, so
memset everything starting from sc->ctts_data + sc->ctts_count couldn't go
wrong. But I am not familiar with this code and that could totally be
wrong. I added jstebbins@ who wrote the code and hopefully we can get
expert opinion there.


> [...]
> --
> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> No great genius has ever existed without some touch of madness. --
> Aristotle
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>
Xiaohan Wang (王消寒) Feb. 21, 2018, 9:14 p.m. UTC | #3
jstebbins: kindly ping!

On Fri, Feb 16, 2018 at 2:42 PM, Xiaohan Wang (王消寒) <xhwang@chromium.org>
wrote:

> +jstebbins@ who wrote that code.
>
> On Fri, Feb 16, 2018 at 12:30 PM, Michael Niedermayer <
> michael@niedermayer.cc> wrote:
>
>> On Thu, Feb 15, 2018 at 12:10:33PM -0800, Xiaohan Wang (王消寒) wrote:
>> >
>>
>> >  mov.c |    3 ++-
>> >  1 file changed, 2 insertions(+), 1 deletion(-)
>> > 5597d0b095f8b15eb11503010a51c2bc2c022413
>> 0001-ffmpeg-Fix-memset-size-on-ctts_data-in-mov_read_trun.patch
>> > From 7c1e6b50ebe35b2a38c4f1d0a988e31eccbd0ead Mon Sep 17 00:00:00 2001
>> > From: Xiaohan Wang <xhwang@chromium.org>
>> > Date: Thu, 15 Feb 2018 12:05:53 -0800
>> > Subject: [PATCH] ffmpeg: Fix memset size on ctts_data in mov_read_trun()
>> >
>> > The allocated size of sc->ctts_data is
>> > (st->nb_index_entries + entries) * sizeof(*sc->ctts_data).
>> >
>> > The size to memset at offset sc->ctts_data + sc->ctts_count should be
>> > (st->nb_index_entries + entries - sc->ctts_count) *
>> sizeof(*sc->ctts_data))
>> >
>> > The current code missed |entries| I believe.
>>
>> shouldnt "entries" be read by this function later and so shouldnt need a
>> memset?
>> I didnt write this, but it looks a bit to me as if it was intended to only
>> clear the area that would not be read later
>>
>
> I thought we only had sc->ctts_count entries before av_fast_realloc, so
> memset everything starting from sc->ctts_data + sc->ctts_count couldn't
> go wrong. But I am not familiar with this code and that could totally be
> wrong. I added jstebbins@ who wrote the code and hopefully we can get
> expert opinion there.
>
>
>> [...]
>> --
>> Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>>
>> No great genius has ever existed without some touch of madness. --
>> Aristotle
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>>
>
diff mbox

Patch

From 7c1e6b50ebe35b2a38c4f1d0a988e31eccbd0ead Mon Sep 17 00:00:00 2001
From: Xiaohan Wang <xhwang@chromium.org>
Date: Thu, 15 Feb 2018 12:05:53 -0800
Subject: [PATCH] ffmpeg: Fix memset size on ctts_data in mov_read_trun()

The allocated size of sc->ctts_data is
(st->nb_index_entries + entries) * sizeof(*sc->ctts_data).

The size to memset at offset sc->ctts_data + sc->ctts_count should be
(st->nb_index_entries + entries - sc->ctts_count) * sizeof(*sc->ctts_data))

The current code missed |entries| I believe.

BUG=812567
---
 libavformat/mov.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index a3725692a7..6407d60050 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -4723,7 +4723,8 @@  static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     // zero valued entries. This ensures clips which mix boxes with and
     // without ctts entries don't pickup uninitialized data.
     memset(sc->ctts_data + sc->ctts_count, 0,
-           (st->nb_index_entries - sc->ctts_count) * sizeof(*sc->ctts_data));
+           (st->nb_index_entries + entries - sc->ctts_count) *
+               sizeof(*sc->ctts_data));
 
     if (index_entry_pos < st->nb_index_entries) {
         // Make hole in index_entries and ctts_data for new samples
-- 
2.16.1.291.g4437f3f132-goog