diff --git a/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java b/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java index 605e328a0..c62a3c226 100644 --- a/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java +++ b/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java @@ -28,6 +28,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import org.apache.poi.EncryptedDocumentException; import org.apache.poi.hssf.OldExcelFormatException; import org.apache.poi.hssf.record.BOFRecord; import org.apache.poi.hssf.record.CodepageRecord; @@ -57,6 +58,9 @@ import org.apache.poi.util.IOUtils; *

*/ public class OldExcelExtractor implements Closeable { + + private final static int FILE_PASS_RECORD_SID = 0x2f; + private RecordInputStream ris; // sometimes we hold the stream here and thus need to ensure it is closed at some point @@ -232,7 +236,9 @@ public class OldExcelExtractor implements Closeable { ris.nextRecord(); switch (sid) { - // Biff 5+ only, no sheet names in older formats + case FILE_PASS_RECORD_SID: + throw new EncryptedDocumentException("Encryption not supported for Old Excel files"); + case OldSheetRecord.sid: OldSheetRecord shr = new OldSheetRecord(ris); shr.setCodePage(codepage); diff --git a/src/testcases/org/apache/poi/hssf/extractor/TestOldExcelExtractor.java b/src/testcases/org/apache/poi/hssf/extractor/TestOldExcelExtractor.java index 4de860d98..73222ed01 100644 --- a/src/testcases/org/apache/poi/hssf/extractor/TestOldExcelExtractor.java +++ b/src/testcases/org/apache/poi/hssf/extractor/TestOldExcelExtractor.java @@ -32,6 +32,7 @@ import java.io.InputStream; import java.io.PrintStream; import org.apache.poi.EmptyFileException; +import org.apache.poi.EncryptedDocumentException; import org.apache.poi.POIDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; @@ -345,10 +346,25 @@ public final class TestOldExcelExtractor { out.close(); } String string = new String(out.toByteArray(), "UTF-8"); - assertTrue("Had: " + string, + assertTrue("Had: " + string, string.contains("Table C-13--Lemons")); } finally { System.setOut(save); } } + + @Test + public void testEncryptionException() throws Exception { + //test file derives from Common Crawl + File file = HSSFTestDataSamples.getSampleFile("60284.xls"); + OldExcelExtractor ex = new OldExcelExtractor(file); + assertEquals(5, ex.getBiffVersion()); + assertEquals(5, ex.getFileType()); + try { + ex.getText(); + fail(); + } catch (EncryptedDocumentException e) { + assertTrue("correct exception thrown", true); + } + } } diff --git a/test-data/spreadsheet/60284.xls b/test-data/spreadsheet/60284.xls new file mode 100644 index 000000000..7e0f9fb83 Binary files /dev/null and b/test-data/spreadsheet/60284.xls differ