From 8c19e7f5e6c4ac5b3ebcbccc12ecfbe2ca2e6c21 Mon Sep 17 00:00:00 2001 From: John Parker Date: Sun, 20 Sep 2026 00:16:27 -0400 Subject: [PATCH 1/2] Organize the MAGIC list, add ZIM archives --- src/magic.h | 123 +++++++++++++++++++++++++++------------------------- 1 file changed, 63 insertions(+), 60 deletions(-) diff --git a/src/magic.h b/src/magic.h index 6856973..d0f6dd1 100644 --- a/src/magic.h +++ b/src/magic.h @@ -38,18 +38,18 @@ filetype_t magic_table [] = { { .name = "Windows Shell Link", .magic = "\x4C\x00\x00\x00\x01\x14\x02\x00\x00\x00\x00\x00\xC0\x00\x00\x00\x00\x00\x00\x46", .len = 20, .ext = "lnk" }, // Raster Image Formats - { .name = "PNG Image", - .magic = "\x89\x50\x4E\x47", .len = 4, .ext = "png" }, - { .name = "JPEG Image", - .magic = "\xFF\xD8\xFF", .len = 3, .ext = "jpeg" }, - { .name = "Quite-OK Image Format", - .magic = "qoif", .len = 4, .ext = "qoi" }, + { .name = "Bitmap Image", + .magic = "BM", .ext = "bmp", .len = 2 }, { .name = "GIF Image (version 87)", .magic = "GIF87a", .len = 6, .ext = "gif" }, { .name = "GIF Image (version 89)", .magic = "GIF89a", .len = 6, .ext = "gif" }, - { .name = "Bitmap Image", - .magic = "BM", .ext = "bmp", .len = 2 }, + { .name = "JPEG Image", + .magic = "\xFF\xD8\xFF", .len = 3, .ext = "jpeg" }, + { .name = "PNG Image", + .magic = "\x89\x50\x4E\x47", .len = 4, .ext = "png" }, + { .name = "Quite-OK Image Format", + .magic = "qoif", .len = 4, .ext = "qoi" }, { .name = "Tagged Image File (Little-Endian)", .magic = "\x49\x49\x2A\x00", .len = 4, .ext = "tiff" }, @@ -60,105 +60,108 @@ filetype_t magic_table [] = { .magic = "WEBP", .len = 4, .off = 8, .ext = "webp" }, // Vector Image Formats // Audio and Video Containers - { .name = "Waveform Audio", - .magic = "WAVE", .len = 4, .off = 8, .ext = "wav" }, + { .name = "Audio Interchange Format", + .magic = "AIFF", .len = 4, .off = 4, .ext = "aiff" }, { .name = "Audio Video Interleave", .magic = "AVI\x20", .len = 4, .off = 8, .ext = "avi" }, - { .name = "Tagged MP3 Audio", - .magic = "ID3", .len = 3, .ext = "mp3" }, + { .name = "Free Lossless Audio Codec", + .magic = "fLaC", .len = 4, .ext = "flac" }, + { .name = "Waveform Audio", + .magic = "WAVE", .len = 4, .off = 8, .ext = "wav" }, + { .name = "MIDI Sound File", + .magic = "MThd", .len = 4, .ext = "mid" }, { .name = "MP4 Video", .magic = "\x66\x74\x79", .off = 4, .len = 3, .ext = "mp4" }, { .name = "OGG Vorbis Format", .magic = "OggS", .len = 4, .ext = "ogg" }, - { .name = "Audio Interchange Format", - .magic = "AIFF", .len = 4, .off = 4, .ext = "aiff" }, { .name = "Quite-OK Audio Format", .magic = "qoaf", .len = 4, .ext = "qoa" }, - { .name = "Free Lossless Audio Codec", - .magic = "fLaC", .len = 4, .ext = "flac" }, - { .name = "MIDI Sound File", - .magic = "MThd", .len = 4, .ext = "mid" }, + { .name = "Tagged MP3 Audio", + .magic = "ID3", .len = 3, .ext = "mp3" }, // Font Formats + { .name = "OpenType Font", + .magic = "OTTO", .len = 4, .ext = "ttf" }, { .name = "WOFF Font 1.0", .magic = "wOFF", .len = 4, .ext = "woff" }, { .name = "WOFF Font 2.0", .magic = "wOF2", .len = 4, .ext = "woff2" }, - { .name = "OpenType Font", - .magic = "OTTO", .len = 4, .ext = "ttf" }, // Other Multimedia - { .name = "Portable Document Format", - .magic = "%PDF-", .len = 5, .ext = "pdf" }, { .name = "Blender File Format", .magic = "BLENDER", .len = 7, .ext = "blend" }, + { .name = "FL Studio Project", + .magic = "FLhd", .len = 4, .ext = "flp" }, { .name = "glTF Binary Format", .magic = "glTF", .len = 4, .ext = "glb" }, - { .name = "Photoshop Document", - .magic = "8BPS", .len = 4, .ext = "psd" }, + { .name = "GIMP Project", + .magic = "gimp xcf ", .len = 9, .ext = "xcf" }, { .name = "Microsoft Compound File Format", .magic = "\xD0\xCF\x11\xE0\xA1\xB1\x1A\xE1", .len = 8, .ext = "doc" }, - { .name = "Rich Text", - .magic = "{\x5Crtf1", .len = 6, .ext = "rtf" }, - { .name = "FL Studio Project", - .magic = "FLhd", .len = 4, .ext = "flp" }, + { .name = "Photoshop Document", + .magic = "8BPS", .len = 4, .ext = "psd" }, + { .name = "Portable Document Format", + .magic = "%PDF-", .len = 5, .ext = "pdf" }, { .name = "Quake 2 Model", .magic = "IDP2\x08\x00\x00\x00", .len = 8, .ext = ".md2" }, - { .name = "GIMP Project", - .magic = "gimp xcf ", .len = 9, .ext = "xcf" }, + { .name = "Rich Text", + .magic = "{\x5Crtf1", .len = 6, .ext = "rtf" }, // Executable Formats + { .name = "ELF Binary", + .magic = "\x7F" "ELF", .len = 4, .ext = "bin", .printer = elf_printer }, + { .name = "Java Class file", + .magic = "\xFE\xCA\xBE\xBA", .len = 4, .ext = "class" }, + { .name = "Lua Bytecode", + .magic = "\x1BLua", .len = 4, .ext = "luac" }, { .name = "MachO Binary (32-bit x86)", .magic = "\xCE\xFA\xED\xFE\x07\x00\x00\x00", .len = 8, .ext = NULL }, { .name = "MachO Binary (64-bit x86)", .magic = "\xCF\xFA\xED\xFE\x07\x00\x00\x00", .len = 8, .ext = NULL }, { .name = "MachO Binary (64-bit ARM)", .magic = "\xCF\xFA\xED\xFE\x0C\x00\x00\x00", .len = 8, .ext = NULL }, - { .name = "ELF Binary", - .magic = "\x7F" "ELF", .len = 4, .ext = "bin", .printer = elf_printer }, + { .name = "PlayStation Package", + .magic = "\x7F\x50\x4B\x47\x80\x00", .len = 6, .ext = "pkg" }, { .name = "Portable Executable Binary", .magic = "\x4D\x5A", .len = 2, .ext = "exe" }, { .name = "WebAssembly Binary", .magic = "\x00asm", .len = 4, .ext = "wasm" }, - { .name = "Lua Bytecode", - .magic = "\x1BLua", .len = 4, .ext = "luac" }, - { .name = "Java Class file", - .magic = "\xFE\xCA\xBE\xBA", .len = 4, .ext = "class" }, - { .name = "PlayStation Package", - .magic = "\x7F\x50\x4B\x47\x80\x00", .len = 6, .ext = "pkg" }, // Archive Formats - { .name = "ZIP Archive", - .magic = "PK", .len = 2, .ext = "zip" }, - { .name = "GZIP Archive", - .magic = "\x1F\x8B", .len = 2, .ext = "gz" }, - { .name = "LZIP Archive", - .magic = "LZIP", .len = 4, .ext = "lz" }, - { .name = "XZ Archive", - .magic = "\xFD\x37\x7A\x58\x5A\x00", .len = 6, .ext = "xz" }, - { .name = "7-Zip Archive", - .magic = "7z\xBC\xAF\x27\x1C", .len = 6, .ext = "7z" }, - { .name = "RAR Archive", - .magic = "\x52\x61\x72\x21\x1A", .len = 5, .ext = "rar" }, { .name = "BZip Archive", .magic = "BZh", .len = 3, .ext = "bz2" }, { .name = "CPIO Archive", .magic = "\x30\x37\x30\x37\x30", .len = 5, .ext = "cpio" }, { .name = "Debian Linux package", .magic = "!\x0A", .len = 8, .ext = "deb" }, + { .name = "GZIP Archive", + .magic = "\x1F\x8B", .len = 2, .ext = "gz" }, + { .name = "LZIP Archive", + .magic = "LZIP", .len = 4, .ext = "lz" }, + { .name = "Quake PACK Archive", + .magic = "PACK", .len = 4, .ext = "pak" }, + { .name = "Quake WAD Archive", // https://github.com/id-Software/Quake/tree/master/WinQuake + .magic = "WAD2", .len = 4, .ext = "wad" }, + { .name = "RAR Archive", + .magic = "\x52\x61\x72\x21\x1A", .len = 5, .ext = "rar" }, { .name = "RedHat RPM Linux Package", .magic = "\x8E\xAD\xE8\x01\x00\x00\x00\x00", .len = 8, .ext = "rpm" }, - { .name = "eXtensible ARchive", - .magic = "xar!", .len = 4, .ext = "xar" }, { .name = "Tar Archive", .magic = "ustar", .len = 5, .ext = "tar" }, - { .name = "Quake WAD Archive", // https://github.com/id-Software/Quake/tree/master/WinQuake - .magic = "WAD2", .len = 4, .ext = "wad" }, - { .name = "Quake PACK Archive", - .magic = "PACK", .len = 4, .ext = "pak" }, + { .name = "eXtensible ARchive", + .magic = "xar!", .len = 4, .ext = "xar" }, + { .name = "XZ Archive", + .magic = "\xFD\x37\x7A\x58\x5A\x00", .len = 6, .ext = "xz" }, + { .name = "ZIM Web Archive", + .magic = "\x5A\x49\x4D\x04", .len = 4, .ext = "zim" }, + { .name = "ZIP Archive", + .magic = "PK", .len = 2, .ext = "zip" }, + { .name = "7-Zip Archive", + .magic = "7z\xBC\xAF\x27\x1C", .len = 6, .ext = "7z" }, // Device Image Formats - { .name = "qcow File Format", - .magic = "QFI", .len = 3, .ext = "qcow" }, - { .name = "ISO9660 CD Image", - .magic = "CD001", .len = 5, .ext = "iso" }, { .name = "Compressed ISO Image", .magic = "IsZ!", .len = 4, .ext = "isz" }, + { .name = "ISO9660 CD Image", + .magic = "CD001", .len = 5, .ext = "iso" }, + { .name = "qcow File Format", + .magic = "QFI", .len = 3, .ext = "qcow" }, + }; #endif From af0d531d87b0318390e6efe363ef8c1ddb9dd20a Mon Sep 17 00:00:00 2001 From: John Parker Date: Sun, 20 Sep 2026 00:24:14 -0400 Subject: [PATCH 2/2] Feature: EXE support --- README.md | 10 +++++----- src/magic.h | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f06cb5a..c348c8d 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,11 @@ make remove #remove from /bin/ ### Format support: > See [./src/magic.h](src/magic.h) -- Images: BMP, PNG, JPEG, QOI, GIF, TIFF, WEBP -- Audio: WAV, MP3, OGG, QOA, AIFF, MIDI, FLAC -- Video: MP4, AVI -- Multimedia: PDF, XCF, Blender, glTF, MD2 -- Fonts: WOFF, WOFF2, OpenType +- Images: BMP, GIF, JPEG, PNG, QOI, TIFF, WebP +- Audio: AIFF, FLAC, WAV, MIDI, ogg, QOA, MP3 +- Video: AVI, MP4 +- Multimedia: Blender, FL Studio, glTF, docx, Photoshop, PDF, Quake MDL, Rich Text +- Fonts: OpenType, WOFF, WOFF2 - Executables: ELF, EXE, WebAssembly, Luac - Archives: Tar, ZIP, GZIP, XZ, LZIP, 7-Zip, RAR, BZip, CPIO, PAK, .deb, .rpm - Binary Data: qcow, ISO diff --git a/src/magic.h b/src/magic.h index d0f6dd1..eba37a8 100644 --- a/src/magic.h +++ b/src/magic.h @@ -107,6 +107,8 @@ filetype_t magic_table [] = { // Executable Formats { .name = "ELF Binary", .magic = "\x7F" "ELF", .len = 4, .ext = "bin", .printer = elf_printer }, + { .name = "Windows Portable Executable (EXE)", + .magic = "MZPE\x00\x00", .len = 6, .ext = "exe" }, { .name = "Java Class file", .magic = "\xFE\xCA\xBE\xBA", .len = 4, .ext = "class" }, { .name = "Lua Bytecode",