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
