[FFmpeg-devel] [PATCH 2/2] avcodec/avdct: Clear IDCTDSPContext context

Michael Niedermayer michael at niedermayer.cc
Tue Jan 28 15:30:39 EET 2020


On Mon, Jan 27, 2020 at 11:49:49PM -0300, James Almer wrote:
> On 1/27/2020 9:25 PM, Michael Niedermayer wrote:
> > On Mon, Jan 27, 2020 at 06:09:28PM -0300, James Almer wrote:
> >> On 1/27/2020 5:54 PM, Michael Niedermayer wrote:
> >>> Fixes use of uninitialized variable and segfault
> >>>
> >>> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> >>> ---
> >>>  libavcodec/avdct.c | 2 +-
> >>>  1 file changed, 1 insertion(+), 1 deletion(-)
> >>>
> >>> diff --git a/libavcodec/avdct.c b/libavcodec/avdct.c
> >>> index 47e5f7134e..7c761cf39a 100644
> >>> --- a/libavcodec/avdct.c
> >>> +++ b/libavcodec/avdct.c
> >>> @@ -100,7 +100,7 @@ int avcodec_dct_init(AVDCT *dsp)
> >>>  
> >>>  #if CONFIG_IDCTDSP
> >>>      {
> >>> -        IDCTDSPContext idsp;
> >>> +        IDCTDSPContext idsp = {0};
> >>
> >> Should probably be a memset() in ff_idctdsp_init(). This is not the only
> >> IDCTDSPContext user.
> > 
> > this would not work as IDCTDSPContext.mpeg4_studio_profile must be 
> > initialized but it is also an input to ff_idctdsp_init()
> > 
> > an alternative to the = {0} on the caller side would be to
> > simply add the mpeg4_studio_profile as an argument to ff_idctdsp_init()
> > and remove it from the context, its all just internal API so we can
> > easily redesign this. It should also be documented better ...
> > 
> > What do you suggest ?
> 
> memset(c, 0, offsetof(IDCTDSPContext, mpeg4_studio_profile)) in
> ff_idctdsp_init() should workaround that without the need to add new
> parameters. Just document that mpeg4_studio_profile must be at the end
> of the struct, and be the first field of all those that must be
> initialized before a call to ff_idctdsp_init(), in case new ones are
> added in the future for whatever reason.

The memset() suggested in ff_idctdsp_init() would make no difference
as the function already sets all fields which are not an input.
This would reduce the suggestion to setting mpeg4_studio_profile
in the ?single? caller which does not memset(0) the context prior.

That leaves 3 suggestions
A. "-        IDCTDSPContext idsp;"
A. "+        IDCTDSPContext idsp = {0};"     (for one caller)

B. "+        idsp.mpeg4_studio_profile = 0;" (for one caller)

C. "-        ff_idctdsp_init();"   
C. "+        ff_idctdsp_init(0);"            (for all callers)

In all cases ff_idctdsp_init() also probably should be documented.

What do you prefer ?

thx

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Republics decline into democracies and democracies degenerate into
despotisms. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200128/6f739e3f/attachment.sig>


More information about the ffmpeg-devel mailing list