X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavcodec%2Fxl.c;h=0c85e22fc0b716b7a8d40a2eb0cf604a7ca68f84;hb=c0b47d1914a19abacdf1edf081cbf07485952920;hp=91a0df068324d2db4e320d7156640c43ae70edb9;hpb=bae053fca4cf662a223821f1e1fe43236e1cf2ff;p=ffmpeg diff --git a/libavcodec/xl.c b/libavcodec/xl.c index 91a0df06832..0c85e22fc0b 100644 --- a/libavcodec/xl.c +++ b/libavcodec/xl.c @@ -52,6 +52,16 @@ static int decode_frame(AVCodecContext *avctx, uint32_t val; int y0, y1, y2, y3 = 0, c0 = 0, c1 = 0; + if (avctx->width & 3) { + av_log(avctx, AV_LOG_ERROR, "width is not a multiple of 4\n"); + return AVERROR_INVALIDDATA; + } + + if (buf_size < avctx->width * avctx->height) { + av_log(avctx, AV_LOG_ERROR, "Packet is too small\n"); + return AVERROR_INVALIDDATA; + } + if(p->data[0]) avctx->release_buffer(avctx, p); @@ -69,11 +79,6 @@ static int decode_frame(AVCodecContext *avctx, stride = avctx->width - 4; - if (buf_size < avctx->width * avctx->height) { - av_log(avctx, AV_LOG_ERROR, "Packet is too small\n"); - return AVERROR_INVALIDDATA; - } - for (i = 0; i < avctx->height; i++) { /* lines are stored in reversed order */ buf += stride; @@ -154,5 +159,5 @@ AVCodec ff_xl_decoder = { .close = decode_end, .decode = decode_frame, .capabilities = CODEC_CAP_DR1, - .long_name = NULL_IF_CONFIG_SMALL("Miro VideoXL"), + .long_name = NULL_IF_CONFIG_SMALL("Miro VideoXL"), };