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)); + } }