// need JDK8+ - https://bugs.openjdk.java.net/browse/JDK-8038081
"slideshow/42474-2.ppt",
// OPC handler works / XSSF handler fails
- "spreadsheet/57181.xlsm"
+ "spreadsheet/57181.xlsm",
+ "spreadsheet/61300.xls"//intentionally fuzzed -- used to cause infinite loop
);
@Parameters(name="{index}: {0} using {1}")
==================================================================== */
package org.apache.poi.stress;
+import static org.junit.Assert.assertFalse;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.util.HashSet;
+import java.util.Set;
+
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.hssf.OldExcelFormatException;
import org.apache.poi.hssf.dev.BiffViewer;
import org.apache.poi.util.RecordFormatException;
import org.junit.Test;
-import java.io.*;
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.junit.Assert.assertFalse;
-
public class HSSFFileHandler extends SpreadsheetHandler {
private final POIFSFileHandler delegate = new POIFSFileHandler();
@Override
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/50833.xls");
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/51832.xls");
EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/XRefCalc.xls");
+ EXPECTED_ADDITIONAL_FAILURES.add("spreadsheet/61300.xls");
}
@Override
_document_size = document.getSize();
_closed = false;
+ if (_document_size < 0) {
+ //throw new RecordFormatException("Document size can't be < 0");
+ }
DocumentNode doc = (DocumentNode)document;
DocumentProperty property = (DocumentProperty)doc.getProperty();
_document = new NPOIFSDocument(
@Override
public void readFully(byte[] buf, int off, int len) {
+ if (len < 0) {
+ throw new RuntimeException("Can't read negative number of bytes");
+ }
+
checkAvaliable(len);
int read = 0;
import java.io.IOException;
import org.apache.poi.poifs.storage.DataInputBlock;
+import org.apache.poi.util.RecordFormatException;
/**
* This class provides methods to read a DocumentEntry managed by a
_current_offset = 0;
_marked_offset = 0;
_document_size = document.getSize();
+ if (_document_size < 0) {
+ throw new RecordFormatException("document_size cannot be < 0");
+ }
_closed = false;
_document = documentNode.getDocument();
_currentBlock = getDataInputBlock(0);
import java.io.IOException;
import java.io.InputStream;
-import org.apache.poi.util.SuppressForbidden;
-
/**
* This is a stream that will only supply bytes up to a certain length - if its
* position goes above that, it will stop.
byte[] buff = new byte[4096];
int count;
while ((count = inp.read(buff)) != -1) {
+ if (count < -1) {
+ throw new RecordFormatException("Can't have read < -1 bytes");
+ }
if (count > 0) {
out.write(buff, 0, count);
}
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.hssf.OldExcelFormatException;
import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.util.RecordFormatException;
import org.junit.BeforeClass;
public class TestBiffDrawingToXml extends BaseXLSIteratingTest {
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class); // HSSFWorkbook cannot open it as well
EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
+ EXCLUDED.put("61300.xls", RecordFormatException.class);
}
@Override
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.RecordFormatException;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
// EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
EXCLUDED.put("50833.xls", IllegalArgumentException.class); // "Name is too long" when setting username
EXCLUDED.put("XRefCalc.xls", RuntimeException.class); // "Buffer overrun"
+ EXCLUDED.put("61300.xls", RecordFormatException.class);
}
@Override
import org.apache.poi.hssf.OldExcelFormatException;
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.RecordFormatException;
import org.junit.BeforeClass;
public class TestEFBiffViewer extends BaseXLSIteratingTest {
EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class); // HSSFWorkbook cannot open it as well
EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
EXCLUDED.put("XRefCalc.xls", RuntimeException.class); // "Buffer overrun"
+ EXCLUDED.put("61300.xls", RecordFormatException.class);
}
@Override
import org.apache.poi.hssf.OldExcelFormatException;
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.RecordFormatException;
import org.junit.BeforeClass;
public class TestFormulaViewer extends BaseXLSIteratingTest {
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class); // HSSFWorkbook cannot open it as well
EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
+ EXCLUDED.put("61300.xls", RecordFormatException.class);
}
@Override
==================================================================== */
package org.apache.poi.hssf.dev;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.PrintStream;
+
import org.apache.poi.EncryptedDocumentException;
import org.apache.poi.POIDataSamples;
import org.apache.poi.hssf.OldExcelFormatException;
import org.apache.poi.hssf.record.RecordInputStream;
import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.RecordFormatException;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
-import java.io.File;
-import java.io.PrintStream;
-
-import static org.junit.Assert.assertTrue;
-
public class TestReSave extends BaseXLSIteratingTest {
@BeforeClass
public static void setup() {
EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class); // HSSFWorkbook cannot open it as well
EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
EXCLUDED.put("XRefCalc.xls", RuntimeException.class); // "Buffer overrun"
+ EXCLUDED.put("61300.xls", RecordFormatException.class);
}
@Override
import org.apache.poi.hssf.OldExcelFormatException;
import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.RecordFormatException;
import org.junit.BeforeClass;
public class TestRecordLister extends BaseXLSIteratingTest {
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 5
EXCLUDED.put("testEXCEL_95.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
EXCLUDED.put("60284.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
+ EXCLUDED.put("61300.xls", RecordFormatException.class);
}
import java.util.TimeZone;
import org.apache.poi.EncryptedDocumentException;
+import org.apache.poi.hpsf.PropertySet;
+import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hssf.HSSFITestDataProvider;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.OldExcelFormatException;
import org.apache.poi.hssf.record.aggregates.RecordAggregate;
import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
+import org.apache.poi.poifs.filesystem.DocumentEntry;
+import org.apache.poi.poifs.filesystem.DocumentInputStream;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.poifs.filesystem.OPOIFSFileSystem;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
wb.close();
}
+ @Test(expected = RuntimeException.class)
+ public void test61300() throws Exception {
+ NPOIFSFileSystem npoifs = new NPOIFSFileSystem(HSSFTestDataSamples.openSampleFileStream("61300.xls"));
+
+ DocumentEntry entry =
+ (DocumentEntry) npoifs.getRoot().getEntry(SummaryInformation.DEFAULT_STREAM_NAME);
+ PropertySet properties =
+ new PropertySet(new DocumentInputStream(entry));
+
+ }
+
}