diff --git a/libavcodec/bmp.c b/libavcodec/bmp.c index 23837bd15a..9a20cd6c97 100644 --- a/libavcodec/bmp.c +++ b/libavcodec/bmp.c @@ -73,18 +73,22 @@ static int bmp_decode_frame(AVCodecContext *avctx, buf += 2; /* reserved2 */ hsize = bytestream_get_le32(&buf); /* header size */ - if(fsize <= hsize){ - av_log(avctx, AV_LOG_ERROR, "declared file size is less than header size (%d < %d)\n", - fsize, hsize); - return -1; - } - ihsize = bytestream_get_le32(&buf); /* more header size */ if(ihsize + 14 > hsize){ av_log(avctx, AV_LOG_ERROR, "invalid header size %d\n", hsize); return -1; } + /* sometimes file size is set to some headers size, set a real size in that case */ + if(fsize == 14 || fsize == ihsize + 14) + fsize = buf_size - 2; + + if(fsize <= hsize){ + av_log(avctx, AV_LOG_ERROR, "declared file size is less than header size (%d < %d)\n", + fsize, hsize); + return -1; + } + switch(ihsize){ case 40: // windib v3 case 64: // OS/2 v2