Open alireza-rezaee opened 9 months ago
If you want to get extension directly from libmagic:
using var magic = new Magic(MagicOpenFlags.MAGIC_EXTENSION);
var result = magic.Read(@"/path/to/gzip.gz"); // from file
Console.WriteLine(result); // -> gz/tgz/tpz/ipk/vbox-extpack/svgz/blend/dia/gnucash/rdata/xoj
However for this file it doesn't work when the magic_buffer method is used:
byte[] buf = File.ReadAllBytes(@"/path/to/gzip.gz");
using var magic = new Magic(MagicOpenFlags.MAGIC_EXTENSION);
var result = magic.Read(buf, buf.Length);
Console.WriteLine(result); // -> "???"
I have no idea why we have different behaviour..
But I think you can update MimeTypesMap dict, before you get results from MimeGuesser:
MimeTypesMap.AddOrUpdate("application/gzip", "gz");
or create your own dictionary with mime<->extensions mapping.
byte[] buf = File.ReadAllBytes(@"/path/to/gzip.gz"); using var magic = new Magic(MagicOpenFlags.MAGIC_EXTENSION); var result = magic.Read(buf, buf.Length); Console.WriteLine(result); // -> "???"
This difference behavior is strange, but it is OK with this very similar gzip-name.gz file:
$ xxd gzip.gz
00000000: 1f8b 0800 ae86 e15b 0203 0300 0000 0000 .......[........
00000010: 0000 0000 ....
$ xxd gzip-name.gz
00000000: 1f8b 0808 ae86 e15b 0203 6e00 0300 0000 .......[..n.....
00000010: 0000 0000 0000
// gzip-name.gz
bytes[] fileBytes =
[
0x1f, 0x8b, 0x08, 0x08, 0xae, 0x86, 0xe1, 0x5b, 0x02, 0x03, 0x6e, 0x00, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00
];
using var magic = new Magic(MagicOpenFlags.MAGIC_EXTENSION);
magic.Read(fileBytes, fileBytes.Length) // -> "gz/tgz/tpz/zabw/svgz/adz/kmy/xcfgz"
It seems that an error occurs here and it recognizes the
.gz
as.bin
. While the file has recognized it correctly. I don't know, doesn't thefile
have an api to get the extension directly? If I understand correctly we are actually using MIME Type mapping as an alternative.Assert.Contains() Failure
This is probably because MimeTypesMap — which depends on MIME types known by Apache: https://github.com/hey-red/Mime/blob/b0582324592c574fda00e0705e4ed036fc918f8e/src/Mime/MimeGuesser.cs#L99