[FFmpeg-devel] [libav-devel] [PATCH] libopusdec: fix out-of-bounds read

Michael Niedermayer michael at niedermayer.cc
Thu Nov 24 17:38:27 EET 2016


On Thu, Nov 24, 2016 at 01:06:35AM +0100, Andreas Cadhalpun wrote:
> On 23.11.2016 03:07, Michael Niedermayer wrote:
> > On Mon, Nov 14, 2016 at 09:55:15PM +0100, Andreas Cadhalpun wrote:
> >>  libopusdec.c |    6 ++++++
> >>  1 file changed, 6 insertions(+)
> >> 0b663c14f4a6dae3e1da453239dbe429aef7886e  0001-libopusdec-default-to-stereo-for-invalid-number-of-c.patch
> >> From d33ded293d15e8ceab666bea834d436f3a225bcc Mon Sep 17 00:00:00 2001
> >> From: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> >> Date: Mon, 14 Nov 2016 21:41:45 +0100
> >> Subject: [PATCH] libopusdec: default to stereo for invalid number of channels
> >>
> >> This fixes an out-of-bounds read if avc->channels is 0.
> >>
> >> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> >> ---
> >>  libavcodec/libopusdec.c | 6 ++++++
> >>  1 file changed, 6 insertions(+)
> >>
> >> diff --git a/libavcodec/libopusdec.c b/libavcodec/libopusdec.c
> >> index acc62f1..61f68ed 100644
> >> --- a/libavcodec/libopusdec.c
> >> +++ b/libavcodec/libopusdec.c
> >> @@ -47,6 +47,12 @@ static av_cold int libopus_decode_init(AVCodecContext *avc)
> >>      int ret, channel_map = 0, gain_db = 0, nb_streams, nb_coupled;
> >>      uint8_t mapping_arr[8] = { 0, 1 }, *mapping;
> >>  
> >> +    if (avc->channels <= 0) {
> >> +        av_log(avc, AV_LOG_WARNING,
> >> +               "Invalid number of channels %d, defaulting to stereo\n", avc->channels);
> >> +        avc->channels = 2;
> >> +    }
> > 
> > This looks wrong
> > 
> > opusdec uses ff_opus_parse_extradata() to set the number of channels
> > from extradata.
> > 
> > The value provided by the demuxer if any should not matter
> 
> However, extradata does not necessarily exist and in that case ff_opus_parse_extradata
> defaults to stereo, unless the demuxer has set channels to 1.
> This can also be done in libopusdec, but channels can still be 0, if the channel count
> in extradata is 0, so the above default setting is needed regardless.
> 
> Attached is an updated patch.
> 
> Best regards,
> Andreas
> 

>  libopusdec.c |    7 +++++++
>  1 file changed, 7 insertions(+)
> bc2908b04551bef5476493cb7bbf0df4979f92f6  0001-libopusdec-default-to-stereo-for-invalid-number-of-c.patch
> From 7bee9f96947c76e6581e9bfa5ce87c3c94a1565e Mon Sep 17 00:00:00 2001
> From: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> Date: Mon, 14 Nov 2016 21:41:45 +0100
> Subject: [PATCH] libopusdec: default to stereo for invalid number of channels
> 
> This fixes an out-of-bounds read if avc->channels is 0.

LGTM

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

The greatest way to live with honor in this world is to be what we pretend
to be. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20161124/937091c4/attachment.sig>


More information about the ffmpeg-devel mailing list