Author: onealj Date: Fri May 19 08:26:41 2017 New Revision: 1795595 URL: http://svn.apache.org/viewvc?rev=1795595&view=rev Log: github-55: NumberFormatException if XSSFName.setNameName is set with a long name that looks similar to a cell address. Thanks to Thomas S @Millie4Ever This closes #55 on github. https://github.com/apache/poi/pull/55
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java?rev=1795595&r1=1795594&r2=1795595&view=diff ============================================================================== --- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java (original) +++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java Fri May 19 08:26:41 2017 @@ -402,8 +402,14 @@ public final class XSSFName implements N if (name.matches("[A-Za-z]+\\d+")) { String col = name.replaceAll("\\d", ""); String row = name.replaceAll("[A-Za-z]", ""); - if (CellReference.cellReferenceIsWithinRange(col, row, SpreadsheetVersion.EXCEL97)) { - throw new IllegalArgumentException("Invalid name: '"+name+"': cannot be $A$1-style cell reference"); + + try { + if (CellReference.cellReferenceIsWithinRange(col, row, SpreadsheetVersion.EXCEL2007)) { + throw new IllegalArgumentException("Invalid name: '"+name+"': cannot be $A$1-style cell reference"); + } + } catch (final NumberFormatException e) { + // row was not parseable as an Integer, such as a BigInt + // therefore name passes the not-a-cell-reference criteria } } Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java?rev=1795595&r1=1795594&r2=1795595&view=diff ============================================================================== --- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java (original) +++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFName.java Fri May 19 08:26:41 2017 @@ -17,14 +17,16 @@ package org.apache.poi.xssf.usermodel; -import org.apache.poi.xssf.XSSFTestDataSamples; -import org.junit.Test; -import org.apache.poi.xssf.XSSFITestDataProvider; - import static org.junit.Assert.*; +import java.io.IOException; +import java.util.Arrays; +import org.junit.Test; + import org.apache.poi.ss.usermodel.BaseTestNamedRange; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.XSSFTestDataSamples; +import org.apache.poi.xssf.XSSFITestDataProvider; /** * @author Yegor Kozlov @@ -130,4 +132,27 @@ public final class TestXSSFName extends wb.close(); } + + //github-55 + @Test + public void testSetNameNameCellAddress() throws IOException { + XSSFWorkbook wb = new XSSFWorkbook(); + wb.createSheet("First Sheet"); + XSSFName name = wb.createName(); + + // Cell addresses/references are not allowed + for (String ref : Arrays.asList("A1", "$A$1", "A1:B2")) { + try { + name.setNameName(ref); + fail("cell addresses are not allowed: " + ref); + } catch (final IllegalArgumentException e) { + // expected + } + } + + // Name that looks similar to a cell reference but is outside the cell reference row and column limits + name.setNameName("A0"); + name.setNameName("F04030020010"); + name.setNameName("XFDXFD10"); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org