From: Nick Burch Date: Wed, 15 Apr 2009 12:42:53 +0000 (+0000) Subject: Fix bug #47034 - Reading the name of a NameRecord when the name is > 127 X-Git-Tag: REL_3_5_BETA6~60 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=a148c6b552fcfa4c1dd270a5188bb016331e4e6e;p=poi.git Fix bug #47034 - Reading the name of a NameRecord when the name is > 127 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@765163 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index e2f50b9ad6..577f26407f 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -37,6 +37,7 @@ + 47034 - Fix reading the name of a NameRecord when the name is very long 47001 - Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs 46973 - Fixed defined names to behave better when refersToFormula is unset 46832 - Allow merged regions with columns greater than 255 or rows bigger than 65536 in XSSF diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 99095f13f2..40255a08b6 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 47034 - Fix reading the name of a NameRecord when the name is very long 47001 - Fixed WriteAccessRecord and LinkTable to handle unusual format written by Google Docs 46973 - Fixed defined names to behave better when refersToFormula is unset 46832 - Allow merged regions with columns greater than 255 or rows bigger than 65536 in XSSF diff --git a/src/java/org/apache/poi/hssf/record/NameRecord.java b/src/java/org/apache/poi/hssf/record/NameRecord.java index 3d48023f4a..a938223606 100644 --- a/src/java/org/apache/poi/hssf/record/NameRecord.java +++ b/src/java/org/apache/poi/hssf/record/NameRecord.java @@ -416,7 +416,7 @@ public final class NameRecord extends StandardRecord { LittleEndianInput in = ris; field_1_option_flag = in.readShort(); field_2_keyboard_shortcut = in.readByte(); - int field_3_length_name_text = in.readByte(); + int field_3_length_name_text = in.readUByte(); int field_4_length_name_definition = in.readShort(); field_5_externSheetIndex_plus1 = in.readShort(); field_6_sheetNumber = in.readUShort(); diff --git a/src/testcases/org/apache/poi/hssf/data/47034.xls b/src/testcases/org/apache/poi/hssf/data/47034.xls new file mode 100644 index 0000000000..81c5849e9f Binary files /dev/null and b/src/testcases/org/apache/poi/hssf/data/47034.xls differ diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index d81441c003..ae65043271 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -1479,4 +1479,14 @@ public final class TestBugs extends BaseTestBugzillaIssues { )); } } + + /** + * java.lang.NegativeArraySizeException reading long + * non-unicode data for a name record + */ + public void test47034() throws IOException { + HSSFWorkbook wb = openSample("47034.xls"); + assertEquals(893, wb.getNumberOfNames()); + assertEquals("Matthew\\Matthew11_1\\Matthew2331_1\\Matthew2351_1\\Matthew2361_1___lab", wb.getNameName(300)); + } }