https://bz.apache.org/bugzilla/show_bug.cgi?id=58648

            Bug ID: 58648
           Summary: FormulaParser throws exception in parseSimpleFactor()
                    when getCellFormula() is called on a cell and the
                    formula contains spaces between closing parentheses ")
                    )"
           Product: POI
           Version: 3.13-FINAL
          Hardware: PC
            Status: NEW
          Severity: critical
          Priority: P2
         Component: SS Common
          Assignee: dev@poi.apache.org
          Reporter: apa...@rpdavison.ca

To reproduce:

Define an XSSFCell with a formula like: "((1 + 1) )".
Note the extra space between the closing parentheses.

Or create a spreadsheet with a cell with the formula specified above, save it
and then read it in as a workbook.  Navigate via POI to the sheet, row, and
cell in question.

Call getCellFormula() on the cell.

Results in an exception: 
org.apache.poi.ss.formula.FormulaParseException: Parse error near char ... ')'
in specified formula '((1 + 1) )'. Expected cell ref or constant literal
    at org.apache.poi.ss.formula.FormulaParser.expected(FormulaParser.java:208)
    at
org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1148)
    at
org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1103)
    at
org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1090)
    at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1450)
    at
org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1570)
    at
org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1554)
    at
org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1511)
    at
org.apache.poi.ss.formula.FormulaParser.intersectionExpression(FormulaParser.java:1499)
    at
org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1472)
    at
org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1131)
    at
org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1103)
    at
org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1090)
    at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1450)
    at
org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1570)
    at
org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1554)
    at
org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1511)
    at
org.apache.poi.ss.formula.FormulaParser.Arguments(FormulaParser.java:1076)
    at org.apache.poi.ss.formula.FormulaParser.function(FormulaParser.java:963)
    at
org.apache.poi.ss.formula.FormulaParser.parseNonRange(FormulaParser.java:556)
    at
org.apache.poi.ss.formula.FormulaParser.parseRangeable(FormulaParser.java:524)
    at
org.apache.poi.ss.formula.FormulaParser.parseRangeExpression(FormulaParser.java:257)
    at
org.apache.poi.ss.formula.FormulaParser.parseSimpleFactor(FormulaParser.java:1143)
    at
org.apache.poi.ss.formula.FormulaParser.percentFactor(FormulaParser.java:1103)
    at
org.apache.poi.ss.formula.FormulaParser.powerFactor(FormulaParser.java:1090)
    at org.apache.poi.ss.formula.FormulaParser.Term(FormulaParser.java:1450)
    at
org.apache.poi.ss.formula.FormulaParser.additiveExpression(FormulaParser.java:1570)
    at
org.apache.poi.ss.formula.FormulaParser.concatExpression(FormulaParser.java:1554)
    at
org.apache.poi.ss.formula.FormulaParser.comparisonExpression(FormulaParser.java:1511)
    at
org.apache.poi.ss.formula.FormulaParser.intersectionExpression(FormulaParser.java:1492)
    at
org.apache.poi.ss.formula.FormulaParser.unionExpression(FormulaParser.java:1472)
    at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:1612)
    at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:153)
    at
org.apache.poi.xssf.usermodel.XSSFCell.convertSharedFormula(XSSFCell.java:421)
    at org.apache.poi.xssf.usermodel.XSSFCell.getCellFormula(XSSFCell.java:393)

Remove the white space between the two closing parentheses and the exception
goes away.

Proposed fix:
Add an additional call to "SkipWhite()" before the call to "Match(')');" inside
the case for '('.  Near line 1130 in parseSimpleFactor method of
FormulaParser.java (release version 3.13).

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@poi.apache.org
For additional commands, e-mail: dev-h...@poi.apache.org

Reply via email to