-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Critical
-
Affects Version/s: 3.9.1
-
Component/s: ZSS Component
-
Security Level: Jean
-
None
Steps to Reproduce
run the attached example stack-overflow.zul![]()
Current Result
After several seconds a StackOverflowError occurs:
java.lang.StackOverflowError
at org.dom4j.io.SAXHelper.createXMLReader(SAXHelper.java:83)
at org.dom4j.io.SAXReader.createXMLReader(SAXReader.java:894)
at org.dom4j.io.SAXReader.getXMLReader(SAXReader.java:715)
at org.dom4j.io.SAXReader.read(SAXReader.java:435)
at org.dom4j.io.SAXReader.read(SAXReader.java:343)
at org.zkoss.poi.openxml4j.opc.internal.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:377)
at org.zkoss.poi.openxml4j.opc.internal.ContentTypeManager.<init>(ContentTypeManager.java:105)
at org.zkoss.poi.openxml4j.opc.internal.ZipContentTypeManager.<init>(ZipContentTypeManager.java:56)
at org.zkoss.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:168)
at org.zkoss.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:662)
at org.zkoss.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:269)
at org.zkoss.poi.util.PackageHelper.open(PackageHelper.java:39)
at org.zkoss.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:307)
at org.zkoss.zss.range.impl.imexp.ExcelXlsxImporter.createPoiBook(ExcelXlsxImporter.java:89)
at org.zkoss.zss.range.impl.imexp.AbstractExcelImporter.imports(AbstractExcelImporter.java:129)
at org.zkoss.zss.range.impl.imexp.ExcelImportAdapter.imports(ExcelImportAdapter.java:46)
at org.zkoss.zss.range.impl.imexp.AbstractImporter.imports(AbstractImporter.java:54)
at org.zkoss.zss.ui.Spreadsheet.getSBook(Spreadsheet.java:653)
at org.zkoss.zss.ui.Spreadsheet.deleteSelfEditorFocus(Spreadsheet.java:709)
at org.zkoss.zss.ui.Spreadsheet.cleanSelectedSheet(Spreadsheet.java:5311)
at org.zkoss.zss.ui.Spreadsheet.initBook0(Spreadsheet.java:785)
at org.zkoss.zss.ui.Spreadsheet.initBook(Spreadsheet.java:686)
at org.zkoss.zss.ui.Spreadsheet.getSBook(Spreadsheet.java:655)
at org.zkoss.zss.ui.Spreadsheet.deleteSelfEditorFocus(Spreadsheet.java:709)
at org.zkoss.zss.ui.Spreadsheet.cleanSelectedSheet(Spreadsheet.java:5311)
at org.zkoss.zss.ui.Spreadsheet.initBook0(Spreadsheet.java:785)
at org.zkoss.zss.ui.Spreadsheet.initBook(Spreadsheet.java:686)
at org.zkoss.zss.ui.Spreadsheet.getSBook(Spreadsheet.java:655)
at org.zkoss.zss.ui.Spreadsheet.deleteSelfEditorFocus(Spreadsheet.java:709)
at org.zkoss.zss.ui.Spreadsheet.cleanSelectedSheet(Spreadsheet.java:5311)
at org.zkoss.zss.ui.Spreadsheet.initBook0(Spreadsheet.java:785)
at org.zkoss.zss.ui.Spreadsheet.initBook(Spreadsheet.java:686)
at org.zkoss.zss.ui.Spreadsheet.getSBook(Spreadsheet.java:655)
...
repeat the last 5 methods
Expected Result
no StackOverflowError and rather a RuntimeException indicating some unavailable resources
Debug Info
Choosing a larger .xlsx file delays the StackOverflowError even more since it will import the book with every iteration over the 5 method loop.
Especially with large files that results in vast memory and CPU usage for a long time (+1000x before the Stack is full)
Root Cause
calling getBook/getSBook after the Session/Desktop is gone results in this recursive loop since the internal _book property is null while _src *still contains a path (triggering the re-import of the .xlsx file) at the same time *_selectedSheet is not NULL causing a nestes call to getSBook when trying to reset it.
Workaround
apply the attached patch class Spreadsheet_Patch_ZK1329.java![]()
<spreadsheet use="zk.support.Spreadsheet_Patch_ZK1329" ...