X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Ffmvc.c;h=aab46da9cff75a0f7c54f26518ee4905119555e1;hb=a247ac640df3da573cd661065bf53f37863e2b46;hp=a06b90c6fe24f8e8f83d0d8d36d1905cdfcb0481;hpb=b14761d1f8372dfe558193b8b754b9f1a858077d;p=ffmpeg diff --git a/libavcodec/fmvc.c b/libavcodec/fmvc.c index a06b90c6fe2..aab46da9cff 100644 --- a/libavcodec/fmvc.c +++ b/libavcodec/fmvc.c @@ -402,6 +402,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, AVFrame *frame = data; int ret, y, x; + if (avpkt->size < 8) + return AVERROR_INVALIDDATA; + if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; @@ -437,6 +440,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, memcpy(dst, src, avctx->width * s->bpp); dst -= frame->linesize[0]; src += s->stride * 4; + if (bytestream2_tell_p(pb) < y*s->stride * 4) + break; } } else { unsigned block, nb_blocks; @@ -530,7 +535,7 @@ static av_cold int decode_init(AVCodecContext *avctx) switch (avctx->bits_per_coded_sample) { case 16: - avctx->pix_fmt = AV_PIX_FMT_RGB555; + avctx->pix_fmt = AV_PIX_FMT_RGB555LE; break; case 24: avctx->pix_fmt = AV_PIX_FMT_BGR24; @@ -621,7 +626,7 @@ static av_cold int decode_close(AVCodecContext *avctx) return 0; } -AVCodec ff_fmvc_decoder = { +const AVCodec ff_fmvc_decoder = { .name = "fmvc", .long_name = NULL_IF_CONFIG_SMALL("FM Screen Capture Codec"), .type = AVMEDIA_TYPE_VIDEO,