Quite a few programs missed that detail of the spec (including old versions of FFmpeg I believe) and when we would otherwise fail anyway it seems worth a try to us a simple byte-aligned stride instead.
Signed-off-by: Reimar Döffinger <reimar.doeffin...@gmx.de> --- libavcodec/bmp.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/libavcodec/bmp.c b/libavcodec/bmp.c index 458fd0c..a35ed1a 100644 --- a/libavcodec/bmp.c +++ b/libavcodec/bmp.c @@ -215,9 +215,13 @@ static int bmp_decode_frame(AVCodecContext *avctx, n = ((avctx->width * depth + 31) / 8) & ~3; if (n * avctx->height > dsize && comp != BMP_RLE4 && comp != BMP_RLE8) { - av_log(avctx, AV_LOG_ERROR, "not enough data (%d < %d)\n", - dsize, n * avctx->height); - return AVERROR_INVALIDDATA; + n = (avctx->width * depth + 7) / 8; + if (n * avctx->height > dsize) { + av_log(avctx, AV_LOG_ERROR, "not enough data (%d < %d)\n", + dsize, n * avctx->height); + return AVERROR_INVALIDDATA; + } + av_log(avctx, AV_LOG_ERROR, "data size too small, assuming missing line alignment\n"); } // RLE may skip decoding some picture areas, so blank picture before decoding -- 2.1.4 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel