diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index e2e772a3c..3ee716b13 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 49219 - ExternalNameRecord support for DDE Link entries without an operation 50846 - More XSSFColor theme improvements, this time for Cell Borders 50939 - ChartEndObjectRecord is supposed to have 6 bytes at the end, but handle it not HMEF - New component which supports TNEF (Transport Neutral Encoding Format), aka winmail.dat diff --git a/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java b/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java index cb1c5ac25..934cf431d 100644 --- a/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java +++ b/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java @@ -176,14 +176,16 @@ public final class ExternalNameRecord extends StandardRecord { // another switch: the fWantAdvise bit specifies whether the body describes // an external defined name or a DDE data item if(isAutomaticLink()){ - //body specifies DDE data item - int nColumns = in.readUByte() + 1; - int nRows = in.readShort() + 1; - - int totalCount = nRows * nColumns; - _ddeValues = ConstantValueParser.parse(in, totalCount); - _nColumns = nColumns; - _nRows = nRows; + if(in.available() > 0) { + //body specifies DDE data item + int nColumns = in.readUByte() + 1; + int nRows = in.readShort() + 1; + + int totalCount = nRows * nColumns; + _ddeValues = ConstantValueParser.parse(in, totalCount); + _nColumns = nColumns; + _nRows = nRows; + } } else { //body specifies an external defined name int formulaLen = in.readUShort(); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index e27ce841a..590d096e1 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -2036,4 +2036,10 @@ if(1==2) { HSSFWorkbook wb = openSample("50939.xls"); assertEquals(2, wb.getNumberOfSheets()); } + + public void test49219() throws Exception { + HSSFWorkbook wb = openSample("49219.xls"); + assertEquals(1, wb.getNumberOfSheets()); + assertEquals("DGATE", wb.getSheetAt(0).getRow(1).getCell(0).getStringCellValue()); + } } diff --git a/test-data/spreadsheet/49219.xls b/test-data/spreadsheet/49219.xls new file mode 100644 index 000000000..68605ea48 Binary files /dev/null and b/test-data/spreadsheet/49219.xls differ