Uploaded image for project: 'Keikai'
  1. Keikai
  2. KEIKAI-432

name index overflow during importing

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Normal Normal
    • 5.6.1
    • 5.6.0
    • None
    • Security Level: Jimmy
    • None

      Steps to Reproduce

      1. run the test case keikai.test/io.keikai.model.ImporterTest.nameIndexOverflow()
      check branch https://github.com/zkoss/keikaicml/tree/KEIKAI-432

      Current Result

      java.lang.IndexOutOfBoundsException: Index -30353 out of bounds for length 35184
      at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
      at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
      at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)
      at java.base/java.util.Objects.checkIndex(Objects.java:359)
      at java.base/java.util.ArrayList.get(ArrayList.java:427)
      at io.keikai.model.impl.sys.formula.ParsingBook.getNameInfo(ParsingBook.java:241)
      at io.keikai.model.impl.sys.formula.ParsingBook.getNameText(ParsingBook.java:227)
      at io.keikai.model.impl.sys.formula.FormulaEngineImpl.toDependRef(FormulaEngineImpl.java:354)
      at io.keikai.model.impl.sys.formula.FormulaEngineImpl.updateDependencyTable(FormulaEngineImpl.java:1492)
      at io.keikai.model.impl.CellImpl.setValue(CellImpl.java:472)
      at io.keikai.model.impl.CellImpl.setValue(CellImpl.java:418)
      at io.keikai.model.impl.CellImpl.setFormulaValue(CellImpl.java:277)
      at io.keikai.model.impl.CellImpl.setFormulaValue(CellImpl.java:251)
      at io.keikai.model.impl.CellProxy.setFormulaValue(CellProxy.java:113)
      at io.keikai.importer.XlsxImporter.importCell(XlsxImporter.java:1754)
      at io.keikai.importer.XlsxImporter.importRow(XlsxImporter.java:1702)
      at io.keikai.importer.XlsxImporter.imports(XlsxImporter.java:287)
      at io.keikai.range.impl.imexp.ExcelImportAdapter.imports(ExcelImportAdapter.java:48)
      at io.keikai.range.impl.imexp.AbstractImporter.imports(AbstractImporter.java:57)
      at io.keikai.ui.Spreadsheet.getSBook(Spreadsheet.java:675)
      at io.keikai.ui.Spreadsheet.getSelectedSSheet(Spreadsheet.java:854)
      at io.keikai.ui.Spreadsheet.doInvalidate(Spreadsheet.java:2587)
      at io.keikai.ui.Spreadsheet.invalidate(Spreadsheet.java:2444)
      at io.keikai.ui.Spreadsheet.setSrc(Spreadsheet.java:903)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
      at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.base/java.lang.reflect.Method.invoke(Method.java:564)
      at org.zkoss.zk.ui.metainfo.Property.assign0(Property.java:332)
      at org.zkoss.zk.ui.metainfo.Property.assign(Property.java:174)
      at org.zkoss.zk.ui.metainfo.ComponentInfo.applyProperties(ComponentInfo.java:742)
      at org.zkoss.zk.ui.impl.AbstractUiFactory.newComponent(AbstractUiFactory.java:146)
      at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:927)
      at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:897)
      at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:784)
      at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:844)
      at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:802)
      at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:748)
      at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:469)
      at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:377)
      at org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:215)
      at org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:140)

      Expected Result

      no error

      Debug Information

      1. it only prints the exception if you configure the logger correctly.
      2. root cause

      public class NamePtg extends OperandPtg implements WorkbookDependentFormula {
      	...
      	private int field_1_label_index;
      ...
      
      	public void write(LittleEndianOutput out) {
      		...
      		out.writeShort(field_1_label_index);
      }
      

      When serializing a NamePtg, it writes an integer into a short and causes the overflow.

            hawk hawk
            hawk hawk
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: