mirror of https://github.com/apache/poi.git
Bug 66425: Avoid a ClassCastException found via oss-fuzz
We try to avoid throwing ClassCastException, but it was possible to trigger one here with a specially crafted input-file Also add SXSSFWorkbook.write() to integrationtests Fixes https://oss-fuzz.com/testcase-detail/5185049589579776 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1912162 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
5c2a89412b
commit
e686e84512
|
@ -28,6 +28,7 @@ import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
@ -54,6 +55,7 @@ import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.util.IOUtils;
|
import org.apache.poi.util.IOUtils;
|
||||||
import org.apache.poi.xssf.eventusermodel.XSSFReader;
|
import org.apache.poi.xssf.eventusermodel.XSSFReader;
|
||||||
import org.apache.poi.xssf.extractor.XSSFExportToXml;
|
import org.apache.poi.xssf.extractor.XSSFExportToXml;
|
||||||
|
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFMap;
|
import org.apache.poi.xssf.usermodel.XSSFMap;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
import org.apache.poi.xssf.usermodel.XSSFSheet;
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
|
@ -115,6 +117,13 @@ public class XSSFFileHandler extends SpreadsheetHandler {
|
||||||
// and finally ensure that exporting to XML works
|
// and finally ensure that exporting to XML works
|
||||||
exportToXML(wb);
|
exportToXML(wb);
|
||||||
|
|
||||||
|
// also try to read and write the sheet via SXSSF
|
||||||
|
try (SXSSFWorkbook swb = new SXSSFWorkbook(wb)) {
|
||||||
|
try (OutputStream out = NullOutputStream.INSTANCE) {
|
||||||
|
swb.write(out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// this allows to trigger a heap-dump at this point to see which memory is still allocated
|
// this allows to trigger a heap-dump at this point to see which memory is still allocated
|
||||||
//HeapDump.dumpHeap("/tmp/poi.hprof", false);
|
//HeapDump.dumpHeap("/tmp/poi.hprof", false);
|
||||||
|
|
||||||
|
|
|
@ -803,7 +803,12 @@ public class XSSFTable extends POIXMLDocumentPart implements Table {
|
||||||
* manually add cells with values of "Column1", "Column2" etc first.
|
* manually add cells with values of "Column1", "Column2" etc first.
|
||||||
*/
|
*/
|
||||||
public void updateHeaders() {
|
public void updateHeaders() {
|
||||||
XSSFSheet sheet = (XSSFSheet)getParent();
|
final POIXMLDocumentPart parent = getParent();
|
||||||
|
if (!(parent instanceof XSSFSheet)) {
|
||||||
|
throw new IllegalArgumentException("Had unexpected type of parent: " + (parent == null ? "<null>" : parent.getClass()));
|
||||||
|
}
|
||||||
|
|
||||||
|
XSSFSheet sheet = (XSSFSheet) parent;
|
||||||
CellReference ref = getStartCellReference();
|
CellReference ref = getStartCellReference();
|
||||||
if (ref == null) return;
|
if (ref == null) return;
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@ -725,4 +726,13 @@ public final class TestSXSSFWorkbook extends BaseTestXWorkbook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void writeBrokenFile() throws IOException {
|
||||||
|
try (final Workbook wb = _testDataProvider.openSampleWorkbook("clusterfuzz-testcase-minimized-POIXSSFFuzzer-5185049589579776.xlsx")) {
|
||||||
|
try (OutputStream out = NullOutputStream.INSTANCE) {
|
||||||
|
assertThrows(IllegalArgumentException.class,
|
||||||
|
() -> wb.write(out));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue