On Tue, Feb 04, 2014 at 11:31:42AM +0100, Anton Khirnov wrote:
> Fixes invalid writes on pixel format changes.
> 
> Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
> CC:[email protected]
> ---
>  libavcodec/lagarith.c |   12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/libavcodec/lagarith.c b/libavcodec/lagarith.c
> index 292d952..2814e2d 100644
> --- a/libavcodec/lagarith.c
> +++ b/libavcodec/lagarith.c
> @@ -52,6 +52,7 @@ typedef struct LagarithContext {
>      int zeros;                  /**< number of consecutive zero bytes 
> encountered */
>      int zeros_rem;              /**< number of zero bytes remaining to 
> output */
>      uint8_t *rgb_planes;
> +    int      rgb_planes_allocated;
>      int rgb_stride;
>  } LagarithContext;
>  
> @@ -564,13 +565,12 @@ static int lag_decode_frame(AVCodecContext *avctx,
>          offs[1] = offset_gu;
>          offs[2] = offset_ry;
>  
> +        l->rgb_stride = FFALIGN(avctx->width, 16);
> +        av_fast_malloc(&l->rgb_planes, &l->rgb_planes_allocated,
> +                       l->rgb_stride * avctx->height * planes + 1);
>          if (!l->rgb_planes) {
> -            l->rgb_stride = FFALIGN(avctx->width, 16);
> -            l->rgb_planes = av_malloc(l->rgb_stride * avctx->height * planes 
> + 1);
> -            if (!l->rgb_planes) {
> -                av_log(avctx, AV_LOG_ERROR, "cannot allocate temporary 
> buffer\n");
> -                return AVERROR(ENOMEM);
> -            }
> +            av_log(avctx, AV_LOG_ERROR, "cannot allocate temporary 
> buffer\n");
> +            return AVERROR(ENOMEM);
>          }
>          for (i = 0; i < planes; i++)
>              srcs[i] = l->rgb_planes + (i + 1) * l->rgb_stride * 
> avctx->height - l->rgb_stride;
> -- 

might be OK
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to