[File] [PATCH] Fix broken BMP detection since 5.38
Huki
gk7huki at gmail.com
Fri Feb 28 03:08:29 UTC 2020
Hi,
Any news regarding the fix for broken bitmaps? I noticed my email was
filtered because of too big attachments. If it helps, I'm reposting my
patch in plain text.
diff --git a/magic/Magdir/images b/magic/Magdir/images
index 931df682..3cde072c 100644
--- a/magic/Magdir/images
+++ b/magic/Magdir/images
@@ -613,7 +613,7 @@
0 leshort 40
# skip bad samples like GAME by looking for valid number of color planes
>12 uleshort 1 Device independent bitmap graphic
-!:mime image/bmp
+!:mime image/x-ms-bmp
!:apple ????BMPp
!:ext dib
>>4 lelong x \b, %d x
@@ -639,7 +639,7 @@
>>18 leshort x \b, %d x
>>20 leshort x %d
>14 leshort 64 PC bitmap, OS/2 2.x format
-!:mime image/bmp
+!:mime image/x-ms-bmp
!:apple ????BMPp
!:ext bmp
# image width and height fields are unsigned integers for OS/2
@@ -660,7 +660,7 @@
#>>(10.l) ubequad !0 \b, bits 0x%16.16llx
# BITMAPV2INFOHEADER adds RGB bit masks
>14 leshort 52 PC bitmap, Adobe Photoshop
-!:mime image/bmp
+!:mime image/x-ms-bmp
!:apple ????BMPp
!:ext bmp
>>18 lelong x \b, %d x
@@ -668,54 +668,52 @@
>>28 leshort x %d
# BITMAPV3INFOHEADER adds alpha channel bit mask
>14 leshort 56 PC bitmap, Adobe Photoshop with alpha channel mask
-!:mime image/bmp
+!:mime image/x-ms-bmp
!:apple ????BMPp
!:ext bmp
>>18 lelong x \b, %d x
>>22 lelong x %d x
>>28 leshort x %d
->14 leshort 40
-# jump 4 bytes before end of file/header to skip fmt-116-signature-id-118.dib
->>(2.l-4) ulong x PC bitmap, Windows 3.x format
-!:mime image/bmp
+>14 leshort 40 PC bitmap, Windows 3.x format
+!:mime image/x-ms-bmp
!:apple ????BMPp
->>>18 lelong x \b, %d x
->>>22 lelong x %d
+>>18 lelong x \b, %d x
+>>22 lelong x %d
# 320 x 400 https://en.wikipedia.org/wiki/LOGO.SYS
->>>18 ulequad =0x0000019000000140 x
+>>18 ulequad =0x0000019000000140 x
!:ext bmp/sys
->>>18 ulequad !0x0000019000000140
+>>18 ulequad !0x0000019000000140
# compression method 2~RLE 4-bit/pixel implies also extension rle
->>>>30 ulelong 2 x
+>>>30 ulelong 2 x
!:ext bmp/rle
->>>>30 default x x
+>>>30 default x x
!:ext bmp
# number of bits per pixel (color depth); found 1 2 4 8 16 24 32
->>>28 leshort x %d
+>>28 leshort x %d
# x, y coordinates of the hotspot; there is no hotspot in bitmaps, so values 0
-#>>>6 uleshort >0 \b, hotspot %ux
-#>>>>8 uleshort x \b%u
+#>>6 uleshort >0 \b, hotspot %ux
+#>>>8 uleshort x \b%u
# number of color planes (must be 1), except badplanes.bmp for testing
-#>>>26 uleshort >1 \b, %u color planes
+#>>26 uleshort >1 \b, %u color planes
# compression method: 0~no 1~RLE 8-bit/pixel 2~RLE 4-bit/pixel 3~Huffman 1D 6~RGBA bit field masks
-#>>>30 ulelong 3 \b, Huffman 1D compression
->>>30 ulelong >0 \b, %u compression
+#>>30 ulelong 3 \b, Huffman 1D compression
+>>30 ulelong >0 \b, %u compression
# image size is the size of raw bitmap; a dummy 0 can be given for BI_RGB bitmaps
->>>34 ulelong >0 \b, image size %u
+>>34 ulelong >0 \b, image size %u
# horizontal and vertical resolution of the image (pixel per metre, signed integer)
->>>38 lelong >0 \b, resolution %d x
->>>>42 lelong x %d px/m
+>>38 lelong >0 \b, resolution %d x
+>>>42 lelong x %d px/m
# number of colors in palette 16 256, or 0 to default to 2**n
-#>>>46 ulelong >0 \b, %u colors
+#>>46 ulelong >0 \b, %u colors
# number of important colors used, or 0 when every color is important
->>>50 ulelong >0 \b, %u important colors
+>>50 ulelong >0 \b, %u important colors
# cbSize; often size of file
->>>2 ulelong x \b, cbSize %u
-#>>>2 ulelong x \b, cbSize 0x%x
+>>2 ulelong x \b, cbSize %u
+#>>2 ulelong x \b, cbSize 0x%x
# offBits; offset to bitmap data like 36h 76h BEh 236h 406h 436h 4E6h
->>>10 ulelong x \b, bits offset %u
-#>>>10 ulelong x \b, bits offset 0x%x
-#>>>(10.l) ubequad !0 \b, bits 0x%16.16llxd
+>>10 ulelong x \b, bits offset %u
+#>>10 ulelong x \b, bits offset 0x%x
+#>>(10.l) ubequad !0 \b, bits 0x%16.16llxd
>14 leshort 124 PC bitmap, Windows 98/2000 and newer format
!:mime image/x-ms-bmp
>>18 lelong x \b, %d x
------------------------------------------------------------------------
*From:* Huki <gk7huki at gmail.com>
*Sent:* Sun, 2 Feb 2020 04:22:49 +0530
*To:* file <file at astron.com>
*Subject:* [File] [PATCH] Fix broken BMP detection since 5.38
Since updating to File 5.38, bitmap images with header size 40 (Windows
3.x format) aren't detected under certain conditions. It seems to happen
when the file size is > 1MB (eg, a 1024 x 1024 RGB image).
$ file test.bmp
test.bmp: data
I traced down the issue to this recently added line:
# jump 4 bytes before end of file/header to skip
fmt-116-signature-id-118.dib
>>(2.l-4) ulong x PC bitmap, Windows 3.x format
It's a bit weird and I don't see any reason to do this. I removed this
(and adjusted the lines below) and the detection is working again.
$ file -m magic.mgc test.bmp
test.bmp: PC bitmap, Windows 3.x format, 1024 x 1024 x 24, image size
3145728, resolution 11811 x 11811 px/m, cbSize 3145782, bits offset 54
Also, I changed the mimetype to consistently use image/x-ms-bmp as
opposed to image/bmp in some places.
I've attached the patch and the test bitmap file.
Regards,
Huki
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.astron.com/pipermail/file/attachments/20200228/8f225a0c/attachment.htm>
More information about the File
mailing list