X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ffic.c;h=ef5f3f44d1ae7e1c4296902125dc25b20a619876;hb=e5bcda6473a2d6984216004506374669501fcf3b;hp=65d102b86bea25f8bdc982889c50b2277342710b;hpb=c2631dfd0a0a12050cc1765fd41702c5e93abee5;p=ffmpeg diff --git a/libavcodec/fic.c b/libavcodec/fic.c index 65d102b86be..ef5f3f44d1a 100644 --- a/libavcodec/fic.c +++ b/libavcodec/fic.c @@ -22,6 +22,7 @@ */ #include "libavutil/common.h" +#include "libavutil/mem_internal.h" #include "libavutil/opt.h" #include "avcodec.h" #include "internal.h" @@ -278,7 +279,7 @@ static int fic_decode_frame(AVCodecContext *avctx, void *data, int skip_cursor = ctx->skip_cursor; uint8_t *sdata; - if ((ret = ff_reget_buffer(avctx, ctx->frame)) < 0) + if ((ret = ff_reget_buffer(avctx, ctx->frame, 0)) < 0) return ret; /* Header + at least one slice (4) */ @@ -356,7 +357,7 @@ static int fic_decode_frame(AVCodecContext *avctx, void *data, sdata = src + tsize + FIC_HEADER_SIZE + 4 * nslices; msize = avpkt->size - nslices * 4 - tsize - FIC_HEADER_SIZE; - if (msize <= 0) { + if (msize <= ctx->aligned_width/8 * (ctx->aligned_height/8) / 8) { av_log(avctx, AV_LOG_ERROR, "Not enough frame data to decode.\n"); return AVERROR_INVALIDDATA; } @@ -421,7 +422,7 @@ static int fic_decode_frame(AVCodecContext *avctx, void *data, } /* Make sure we use a user-supplied buffer. */ - if ((ret = ff_reget_buffer(avctx, ctx->final_frame)) < 0) { + if ((ret = ff_reget_buffer(avctx, ctx->final_frame, 0)) < 0) { av_log(avctx, AV_LOG_ERROR, "Could not make frame writable.\n"); return ret; }