From 8dd81c77f14cc30c967a1d9f11c3525562d65fe0 Mon Sep 17 00:00:00 2001 From: Andrey Novosad Date: Wed, 22 Jul 2026 17:17:41 +0300 Subject: [PATCH] fix: Add XLSX signature to MicrosoftOffice365Document (fixes #59) Add the signature 50 4B 03 04 14 00 06 08 08 00 to the list of recognized Office 365 document signatures. This signature is used by some XLSX files (e.g. saved by non-Microsoft editors) and should be recognized as XLSX instead of generic ZIP files. Fixes #59 --- .../FileTypeChecker.Tests.csproj | 3 +++ FileTypeChecker.Tests/FileTypeValidatorTests.cs | 1 + FileTypeChecker.Tests/files/test-issue-59.xlsx | Bin 0 -> 1578 bytes .../Types/MicrosoftOffice365Document.cs | 1 + 4 files changed, 5 insertions(+) create mode 100644 FileTypeChecker.Tests/files/test-issue-59.xlsx diff --git a/FileTypeChecker.Tests/FileTypeChecker.Tests.csproj b/FileTypeChecker.Tests/FileTypeChecker.Tests.csproj index 1ce0499..e700479 100644 --- a/FileTypeChecker.Tests/FileTypeChecker.Tests.csproj +++ b/FileTypeChecker.Tests/FileTypeChecker.Tests.csproj @@ -125,6 +125,9 @@ Always + + Always + Always diff --git a/FileTypeChecker.Tests/FileTypeValidatorTests.cs b/FileTypeChecker.Tests/FileTypeValidatorTests.cs index 0b90eb8..c3ace14 100644 --- a/FileTypeChecker.Tests/FileTypeValidatorTests.cs +++ b/FileTypeChecker.Tests/FileTypeValidatorTests.cs @@ -409,6 +409,7 @@ public void Is_ShouldDistinguishOpenDocumentTypesOnSmallBuffers() [TestCase("FileTypeCheckerLogo-150.heic", typeof(HighEfficiencyImageFile))] [TestCase("issue311docx.testfile", typeof(MicrosoftOffice365Document))] [TestCase("test-issue-41.xlsx", typeof(MicrosoftOffice365Document))] + [TestCase("test-issue-59.xlsx", typeof(MicrosoftOffice365Document))] [TestCase("file_example_AVI_480_750kB.avi", typeof(AudioVideoInterleaveVideoFormat))] [TestCase("file_example_WAV_1MG.wav", typeof(WaveformAudioFileFormat))] [TestCase("test.m4a", typeof(M4a))] diff --git a/FileTypeChecker.Tests/files/test-issue-59.xlsx b/FileTypeChecker.Tests/files/test-issue-59.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..964cc6aeb86ef7f0ca525178982ab69c7a9956f6 GIT binary patch literal 1578 zcmWIWW@Zs#VB_Fm*xC6lW{34}32sIP27M+524MyUhG^&fypq(slK7Cyg4E(zy^7qN zH4|<9nGJc`%2ob3PZ2fEloW8<`})9f4xXp%Gv>V4+jXSx(UzG1wy(CPIxH2Q%)Y;F zzWb*l(_;&^%{XctT9x=LO3^aUrgZARi2Y~YZJoq)#UbI4*ZY7ktM=`ST362L+G{u= zWS73GZG`r^;~YsAioJ$g<|vC8&as|-fcL_}y>rjMUz4omks9_*c2}HTBKPcoE1x4K z@To~QXMC;Tco#XfZAw#lfX(E)L7%>c84z8Kf@x?wNN?VvDW!jr@OXGVkwgo3S}R zV6U^@dV!6X%6PtYfBtaNX2xmNbe)~Kdk?qWRZ|jG)>JmRq&!XHjEOIczxsRbKbksa zQr-1pKVRBc-gtTUt2r=a{{LrY2mps20|O-NO!Ar6?g7eZ0>h6RNXHkY<`nDefykco z8?z1@2ps#kcS5S8t8Qyp_Gv%viNN?kj15sYT zE=1kwy6AP7bLBCE;=XMjhbu3h+;vuOMf~k=zR#=ZaBP9W&~0rnXcmm|KubK9NAS>K=W za_;3Gw^`=161N8yriYw9#JFo2YrBo-sTz(CAOHROz;iC^iAc8r+Yh(qyA}23HJx(y zu6=on4~ZqLEPcCod!}R8wG&-?0%y8vhGo0(-wQiBBgb(~$e-lfc9mT-A9}s`YR@zC zxy{3FA9bg7;T=hxrrftDg*O-O(77?+s;`CdUR^EwyGd_@8~EmYvt+$c`|3b{^Zu)U z-roGdjLpkBzm9A<2=uBJ(92Q~FGHdh+2hb?Hp~Y4p7p`r3;z}J)}KEY;I(niQjtw! z&)GSC=5%|MJ1t*wZa;sD25-rWFAsR{KmPh#*R^=zBF7s}*S92e?Dc6B=RW@N^HbiQ zu;Y`v52ZZx;`;sY=gR+!UStVeGfgp#?ph;uE$XxNqF+-dU3N42IPH;+>dsZYQ&=~D zR^Kl0?$$Ta)A`J8?3ZQKxStx7CLGIN_Wy>_`Gc3+e-taNtM_@Zeahr@E}~~%oN~H) z$bV@?|GJw&EHYI!6&81Z-oi}K4L7a`_5fw(0kH(c;~*~=XQZZ<6zhX2Lr|pKoN?qj zWFX*haqk1!LvP-Oh$~H6BK?u2s$rq*?WD9IBgfZoS;h10_q^X7I;pyFqh)qO?d7KA zx1SAOOFXFC{m$>fnn`?9HWfASOP3Vx{`fv-o|$3zcCR3AgR8sd2(FzUabnh<4eKV! z?c@l}E|R=B?U2cz2`V;Q-U_y+wZ5o->onD%>d*Yg;xHdDGKnzYF3^D9Kmu5bw*YU5 z0l0ECLbnYtJs{