X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fflashsv.c;h=8448a8c285f76397d89e2ab62cfb839bd3cbab3a;hb=e5550c0d0971e393ba221cd69506acd2c2dab89c;hp=1b65ecf6d10c23762e2a68092cdaecf373c5cde7;hpb=9f8e2e92ae88841709ae1ffe71572ef7e5e865c7;p=ffmpeg diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c index 1b65ecf6d10..8448a8c285f 100644 --- a/libavcodec/flashsv.c +++ b/libavcodec/flashsv.c @@ -236,7 +236,7 @@ static int calc_deflate_block_size(int tmpblock_size) } static int flashsv_decode_frame(AVCodecContext *avctx, void *data, - int *data_size, AVPacket *avpkt) + int *got_frame, AVPacket *avpkt) { int buf_size = avpkt->size; FlashSVContext *s = avctx->priv_data; @@ -403,6 +403,11 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, av_log_missing_feature(avctx, "zlibprime_curr", 1); return AVERROR_PATCHWELCOME; } + if (!s->blocks && (s->zlibprime_curr || s->zlibprime_prev)) { + av_log(avctx, AV_LOG_ERROR, "no data available for zlib " + "priming\n"); + return AVERROR_INVALIDDATA; + } size--; // account for flags byte } @@ -438,7 +443,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx, void *data, memcpy(s->keyframe, s->frame.data[0], s->frame.linesize[0] * avctx->height); } - *data_size = sizeof(AVFrame); + *got_frame = 1; *(AVFrame*)data = s->frame; if ((get_bits_count(&gb) / 8) != buf_size)