Uploaded image for project: 'ZK Spreadsheet'
  1. ZK Spreadsheet
  2. ZSS-1329

Potential VERY expensive StackOverflowError

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Critical Critical
    • 3.9.2
    • 3.9.1
    • 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" ...
      

        1. BackgroundComposer4442.java
          0.9 kB
          cor3000
        2. empty.xlsx
          8 kB
          cor3000
        3. Spreadsheet_Patch_ZK1329.java
          0.6 kB
          cor3000
        4. stack-overflow.zul
          0.5 kB
          cor3000

            henrichen henrichen
            cor3000 cor3000
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: