Browse Source

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
tags/REL_3_16_BETA1
Tim Allison 7 years ago
parent
commit
126c6c93a8

+ 7
- 1
src/java/org/apache/poi/hssf/extractor/OldExcelExtractor.java View File

@@ -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;
* </p>
*/
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);

+ 17
- 1
src/testcases/org/apache/poi/hssf/extractor/TestOldExcelExtractor.java View File

@@ -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);
}
}
}

BIN
test-data/spreadsheet/60284.xls View File


Loading…
Cancel
Save