[FFmpeg-devel] [libav-devel] [PATCH] xwddec: prevent overflow of lsize * avctx->height

Michael Niedermayer michael at niedermayer.cc
Sat Dec 19 01:32:32 CET 2015


On Fri, Dec 18, 2015 at 08:13:06PM +0100, Andreas Cadhalpun wrote:
> On 18.12.2015 20:08, Luca Barbato wrote:
> > On 18/12/15 20:04, Andreas Cadhalpun wrote:
> >> This is used to check if the input buffer is larger enough, so if this
> >> overflows it can cause a false negative leading to a segmentation fault
> >> in bytestream2_get_bufferu.
> >>
> >> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> >> ---
> >>  libavcodec/xwddec.c | 6 ++++++
> >>  1 file changed, 6 insertions(+)
> >>
> >> diff --git a/libavcodec/xwddec.c b/libavcodec/xwddec.c
> >> index 2febedc..311eeec 100644
> >> --- a/libavcodec/xwddec.c
> >> +++ b/libavcodec/xwddec.c
> >> @@ -127,6 +127,12 @@ static int xwd_decode_frame(AVCodecContext *avctx, void *data,
> >>          return AVERROR_INVALIDDATA;
> >>      }
> >>  
> >> +    if (lsize > UINT_MAX / avctx->height) {
> >> +        av_log(avctx, AV_LOG_ERROR, "lsize %u too large for height %d\n",
> >> +               lsize, avctx->height);
> >> +        return AVERROR_INVALIDDATA;
> >> +    }
> >> +
> >>      if (ncolors > 256) {
> >>          av_log(avctx, AV_LOG_ERROR, "invalid number of entries in colormap\n");
> >>          return AVERROR_INVALIDDATA;
> >>
> > 
> > Should go after the av_image_check_size or you'd have a division by 0.
> 
> Indeed. Updated patch attached.
> 
> Best regards,
> Andreas
> 

>  xwddec.c |    6 ++++++
>  1 file changed, 6 insertions(+)
> 0be27d89a669445b523bfdac99884065e3581f3c  0001-xwddec-prevent-overflow-of-lsize-avctx-height.patch
> From fb40616d7b432680b92dc3adc44a5b5d12fac55d Mon Sep 17 00:00:00 2001
> From: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> Date: Fri, 18 Dec 2015 19:28:51 +0100
> Subject: [PATCH] xwddec: prevent overflow of lsize * avctx->height
> 
> This is used to check if the input buffer is larger enough, so if this
> overflows it can cause a false negative leading to a segmentation fault
> in bytestream2_get_bufferu.

cant the addition overflow too in the input buffer check ?
if so then using 64bit in the input buffer check would avoid the
need for a explicit check on lsize

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Complexity theory is the science of finding the exact solution to an
approximation. Benchmarking OTOH is finding an approximation of the exact
-------------- 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/20151219/35821e37/attachment.sig>


More information about the ffmpeg-devel mailing list