From: Tim Allison Date: Thu, 20 Oct 2016 15:13:16 +0000 (+0000) Subject: BUG-60284 -- throw EncryptedDocumentException for password protected OldExcel files X-Git-Tag: REL_3_16_BETA1~64 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=126c6c93a8bacc8ae48214a3b305e6446a369793;p=poi.git BUG-60284 -- throw EncryptedDocumentException for password protected OldExcel files git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1765829 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java b/src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java index 605e328a04..c62a3c226f 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 4de860d98e..73222ed01a 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 0000000000..7e0f9fb833 Binary files /dev/null and b/test-data/spreadsheet/60284.xls differ