avcodec/pngdec: Alloc buffer after blend_op check in handle_p_frame_apng()

Avoids memleak on error
Fixes CID1322342

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
Michael Niedermayer 2015-10-11 13:09:56 +02:00
parent 14573b9b7c
commit 47c5a3058e

View File

@ -969,10 +969,7 @@ static int handle_p_frame_apng(AVCodecContext *avctx, PNGDecContext *s,
AVFrame *p) AVFrame *p)
{ {
size_t x, y; size_t x, y;
uint8_t *buffer = av_malloc(s->image_linesize * s->height); uint8_t *buffer;
if (!buffer)
return AVERROR(ENOMEM);
if (s->blend_op == APNG_BLEND_OP_OVER && if (s->blend_op == APNG_BLEND_OP_OVER &&
avctx->pix_fmt != AV_PIX_FMT_RGBA && avctx->pix_fmt != AV_PIX_FMT_RGBA &&
@ -983,6 +980,11 @@ static int handle_p_frame_apng(AVCodecContext *avctx, PNGDecContext *s,
return AVERROR_PATCHWELCOME; return AVERROR_PATCHWELCOME;
} }
buffer = av_malloc(s->image_linesize * s->height);
if (!buffer)
return AVERROR(ENOMEM);
// Do the disposal operation specified by the last frame on the frame // Do the disposal operation specified by the last frame on the frame
if (s->last_dispose_op != APNG_DISPOSE_OP_PREVIOUS) { if (s->last_dispose_op != APNG_DISPOSE_OP_PREVIOUS) {
ff_thread_await_progress(&s->last_picture, INT_MAX, 0); ff_thread_await_progress(&s->last_picture, INT_MAX, 0);