aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYegor Kozlov <yegor@apache.org>2012-03-29 10:35:41 +0000
committerYegor Kozlov <yegor@apache.org>2012-03-29 10:35:41 +0000
commit0afefcd2b852519b036d24f971980a3c21bf9d38 (patch)
tree93b50395ac107990c233f0faec4c6db53ac2ef36
parent18501424af3f15a82002abc7cf635c3254d71e43 (diff)
downloadpoi-0afefcd2b852519b036d24f971980a3c21bf9d38.tar.gz
poi-0afefcd2b852519b036d24f971980a3c21bf9d38.zip
Bugzilla 49529 - avoid exception when cloning sheets with no drawing records and initialized drawing patriarch
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1306781 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/documentation/content/xdocs/status.xml2
-rw-r--r--src/java/org/apache/poi/hssf/model/InternalSheet.java8
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java11
-rw-r--r--test-data/spreadsheet/49529.xlsbin0 -> 16384 bytes
4 files changed, 20 insertions, 1 deletions
diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml
index 0dac8461ae..b0a09088e7 100644
--- a/src/documentation/content/xdocs/status.xml
+++ b/src/documentation/content/xdocs/status.xml
@@ -34,7 +34,7 @@
<changes>
<release version="3.9-beta1" date="2012-??-??">
-
+ <action dev="poi-developers" type="fix">49529 - avoid exception when cloning sheets with no drawing records and initialized drawing patriarch</action>
</release>
<release version="3.8-FINAL" date="2012-03-26">
<action dev="poi-developers" type="add">52928 - DateFormatConverter: an utility to convert instances of java.text.DateFormat to Excel format patterns</action>
diff --git a/src/java/org/apache/poi/hssf/model/InternalSheet.java b/src/java/org/apache/poi/hssf/model/InternalSheet.java
index 0f03bbc457..cbacbc0ca1 100644
--- a/src/java/org/apache/poi/hssf/model/InternalSheet.java
+++ b/src/java/org/apache/poi/hssf/model/InternalSheet.java
@@ -386,6 +386,14 @@ public final class InternalSheet {
((RecordAggregate) rb).visitContainedRecords(new RecordCloner(clonedRecords));
continue;
}
+ if (rb instanceof EscherAggregate){
+ // EscherAggregate is used only as a container for SODRAWING and OBJ record combinations
+ // So, if the container is empty, there is no reason to clone this record
+ // See https://issues.apache.org/bugzilla/show_bug.cgi?id=49529
+ if (0 == rb.getRecordSize()){
+ continue;
+ }
+ }
Record rec = (Record) ((Record) rb).clone();
clonedRecords.add(rec);
}
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
index 111130e29d..0864549f6c 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
@@ -2227,4 +2227,15 @@ if(1==2) {
cell.getCellFormula());
}
+ public void test49529() throws Exception {
+ // user code reported in Bugzilla #49529
+ HSSFWorkbook workbook = openSample("49529.xls");
+ workbook.getSheetAt(0).createDrawingPatriarch();
+ // prior to the fix the line below failed with
+ // java.lang.IllegalStateException: EOF - next record not available
+ workbook.cloneSheet(0);
+
+ // make sure we are still readable
+ writeOutAndReadBack(workbook);
+ }
}
diff --git a/test-data/spreadsheet/49529.xls b/test-data/spreadsheet/49529.xls
new file mode 100644
index 0000000000..1989a6a1d3
--- /dev/null
+++ b/test-data/spreadsheet/49529.xls
Binary files differ