diff --git a/src/ExcelDataReader.Tests/ExcelBinaryReaderTest.cs b/src/ExcelDataReader.Tests/ExcelBinaryReaderTest.cs index 30ecb25f..376203df 100644 --- a/src/ExcelDataReader.Tests/ExcelBinaryReaderTest.cs +++ b/src/ExcelDataReader.Tests/ExcelBinaryReaderTest.cs @@ -356,6 +356,24 @@ public void AllowFfffAsByteOrder() Assert.That(tableCount, Is.EqualTo(454)); } + [Test] + public void AllowFeffAsByteOrder() + { + using var excelReader = ExcelReaderFactory.CreateBinaryReader(Configuration.GetTestWorkbook("Issue695_InvalidByteOrderFEFF.xls")); + int tableCount = 0; + do + { + while (excelReader.Read()) + { + } + + tableCount++; + } + while (excelReader.NextResult()); + + Assert.That(tableCount, Is.GreaterThan(0)); + } + [Test] public void HandleRowBlocksWithOutOfOrderCells() { diff --git a/src/ExcelDataReader/Core/CompoundFormat/CompoundDocument.cs b/src/ExcelDataReader/Core/CompoundFormat/CompoundDocument.cs index de79cf5c..4f4a3102 100644 --- a/src/ExcelDataReader/Core/CompoundFormat/CompoundDocument.cs +++ b/src/ExcelDataReader/Core/CompoundFormat/CompoundDocument.cs @@ -13,7 +13,7 @@ public CompoundDocument(Stream stream) if (!Header.IsSignatureValid) throw new HeaderException(Errors.ErrorHeaderSignature); - if (Header.ByteOrder != 0xFFFE && Header.ByteOrder != 0xFFFF) // Some broken xls files uses 0xFFFF + if (Header.ByteOrder != 0xFFFE && Header.ByteOrder != 0xFFFF && Header.ByteOrder != 0xFEFF) // Some broken xls files use 0xFFFF or 0xFEFF throw new HeaderException(Errors.ErrorHeaderOrder); var difSectorChain = ReadDifSectorChain(reader); diff --git a/src/TestData/Issue695_InvalidByteOrderFEFF.xls b/src/TestData/Issue695_InvalidByteOrderFEFF.xls new file mode 100644 index 00000000..980a49f8 Binary files /dev/null and b/src/TestData/Issue695_InvalidByteOrderFEFF.xls differ