avcodec/cfhd: Make sure we have an end of header tag before allocating a frame.
authorKieran Kunhya <kieran@kunhya.com>
Sun, 31 Jan 2016 23:59:52 +0000 (23:59 +0000)
committerJames Darnley <james.darnley@gmail.com>
Mon, 1 Feb 2016 13:20:20 +0000 (14:20 +0100)
Fixes tickets #5208 and #5209

libavcodec/cfhd.c

index 115081c..410bb7b 100644 (file)
@@ -224,7 +224,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame,
     GetByteContext gb;
     ThreadFrame frame = { .f = data };
     AVFrame *pic = data;
-    int ret = 0, i, j, plane;
+    int ret = 0, i, j, plane, got_buffer = 0;
     int16_t *coeff_data;
 
     avctx->pix_fmt = AV_PIX_FMT_YUV422P10;
@@ -426,6 +426,7 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame,
 
             s->coded_width = 0;
             s->coded_height = 0;
+            got_buffer = 1;
         }
         coeff_data = s->plane[s->channel_num].subband[s->subband_num_actual];
 
@@ -557,6 +558,12 @@ static int cfhd_decode(AVCodecContext *avctx, void *data, int *got_frame,
         goto end;
     }
 
+    if (!got_buffer) {
+        av_log(avctx, AV_LOG_ERROR, "No end of header tag found\n");
+        ret = AVERROR(EINVAL);
+        goto end;
+    }
+
     for (plane = 0; plane < 3 && !ret; plane++) {
         /* level 1 */
         int lowpass_height  = s->plane[plane].band[0][0].height;