avcodec/ivi_common: make while get_bits loop more robust by checking bits left
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 30 Oct 2013 13:23:30 +0000 (14:23 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 30 Oct 2013 13:59:00 +0000 (14:59 +0100)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/ivi_common.c

index 4179852..ab4c995 100644 (file)
@@ -1042,7 +1042,12 @@ int ff_ivi_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
      */
     if (avctx->codec_id == AV_CODEC_ID_INDEO4 &&
         ctx->frame_type == 0/*FRAMETYPE_INTRA*/) {
-        while (get_bits(&ctx->gb, 8)); // skip version string
+            // skip version string
+        while (get_bits(&ctx->gb, 8)) {
+            if (get_bits_left(&ctx->gb) < 8)
+                return AVERROR_INVALIDDATA;
+        }
+
         skip_bits_long(&ctx->gb, 64);  // skip padding, TODO: implement correct 8-bytes alignment
         if (get_bits_left(&ctx->gb) > 18 && show_bits(&ctx->gb, 18) == 0x3FFF8)
             av_log(avctx, AV_LOG_ERROR, "Buffer contains IP frames!\n");