import java.io.IOException;
import org.apache.poi.hssf.eventusermodel.HSSFUserException;
-import org.apache.poi.hssf.record.RecordFormatException;
-import org.apache.poi.hssf.record.Record;
-import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.hssf.record.RecordFactory;
-import org.apache.poi.hssf.record.ContinueRecord;
-import org.apache.poi.hssf.record.DrawingRecord;
-import org.apache.poi.hssf.record.DrawingGroupRecord;
-import org.apache.poi.hssf.record.ObjRecord;
-import org.apache.poi.hssf.record.TextObjectRecord;
+import org.apache.poi.hssf.record.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/**
{
in.nextRecord();
sid = in.getSid();;
-
+
//
// for some reasons we have to make the workbook to be at least 4096 bytes
// but if we have such workbook we fill the end of it with zeros (many zeros)
rec = lastRec;
}
else {
- throw new RecordFormatException("Records should handle ContinueRecord internally. Should not see this exception");
+ if (rec instanceof UnknownRecord) {
+ ;//silently skip records we don't know about
+ } else {
+ throw new RecordFormatException("Records should handle ContinueRecord internally. Should not see this exception");
+ }
}
}
}
}
+ /**
+ * Unknown records can be continued.
+ * Check that HSSFEventFactory doesn't break on them.
+ * (the test file was provided in a reopen of bug #42844)
+ */
+ public void testUnknownContinueRecords() throws Exception {
+ File f = new File(dirname + "/42844.xls");
+
+ HSSFRequest req = new HSSFRequest();
+ MockHSSFListener mockListen = new MockHSSFListener();
+ req.addListenerForAllRecords(mockListen);
+
+ POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(f));
+ HSSFEventFactory factory = new HSSFEventFactory();
+ factory.processWorkbookEvents(req, fs);
+
+ assertTrue("no errors while processing the file", true);
+ }
private static class MockHSSFListener implements HSSFListener {
private MockHSSFListener() {}