avcodec/pngdec: Alloc buffer after blend_op check in handle_p_frame_apng()
authorMichael Niedermayer <michael@niedermayer.cc>
Sun, 11 Oct 2015 11:09:56 +0000 (13:09 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sun, 11 Oct 2015 11:09:56 +0000 (13:09 +0200)
Avoids memleak on error
Fixes CID1322342

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/pngdec.c

index 2ab456d..a998b1d 100644 (file)
@@ -969,10 +969,7 @@ static int handle_p_frame_apng(AVCodecContext *avctx, PNGDecContext *s,
                                AVFrame *p)
 {
     size_t x, y;
-    uint8_t *buffer = av_malloc(s->image_linesize * s->height);
-
-    if (!buffer)
-        return AVERROR(ENOMEM);
+    uint8_t *buffer;
 
     if (s->blend_op == APNG_BLEND_OP_OVER &&
         avctx->pix_fmt != AV_PIX_FMT_RGBA &&
@@ -983,6 +980,11 @@ static int handle_p_frame_apng(AVCodecContext *avctx, PNGDecContext *s,
         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
     if (s->last_dispose_op != APNG_DISPOSE_OP_PREVIOUS) {
         ff_thread_await_progress(&s->last_picture, INT_MAX, 0);