Some BMP files have file size declared in the header equal to headers size
authorKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 24 Nov 2008 11:24:02 +0000 (11:24 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Mon, 24 Nov 2008 11:24:02 +0000 (11:24 +0000)
without image data, so try to correct that value before conducting checks on
declared file size.

Originally committed as revision 15924 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/bmp.c

index 23837bd..9a20cd6 100644 (file)
@@ -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