]> source.dussan.org Git - poi.git/commitdiff
Bugzilla 49529 - avoid exception when cloning sheets with no drawing records and...
authorYegor Kozlov <yegor@apache.org>
Thu, 29 Mar 2012 10:35:41 +0000 (10:35 +0000)
committerYegor Kozlov <yegor@apache.org>
Thu, 29 Mar 2012 10:35:41 +0000 (10:35 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1306781 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/hssf/model/InternalSheet.java
src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
test-data/spreadsheet/49529.xls [new file with mode: 0644]

index 0dac8461aefbc4d783152617cc022416056894f1..b0a09088e703af66ccebe82b1e063d59de517088 100644 (file)
@@ -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>
index 0f03bbc4577e3f7c12c2fc7c15b558f8aeba8c92..cbacbc0ca193b3377450c93cdd88dce4f4782cb1 100644 (file)
@@ -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);
         }
index 111130e29ded1a5ef0289965a5334e93448600e4..0864549f6ce2dbecf57729ad46b92c0a7e09f533 100644 (file)
@@ -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 (file)
index 0000000..1989a6a
Binary files /dev/null and b/test-data/spreadsheet/49529.xls differ