From 0afefcd2b852519b036d24f971980a3c21bf9d38 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Thu, 29 Mar 2012 10:35:41 +0000 Subject: [PATCH] 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 --- src/documentation/content/xdocs/status.xml | 2 +- .../apache/poi/hssf/model/InternalSheet.java | 8 ++++++++ .../org/apache/poi/hssf/usermodel/TestBugs.java | 11 +++++++++++ test-data/spreadsheet/49529.xls | Bin 0 -> 16384 bytes 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test-data/spreadsheet/49529.xls 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 @@ - + 49529 - avoid exception when cloning sheets with no drawing records and initialized drawing patriarch 52928 - DateFormatConverter: an utility to convert instances of java.text.DateFormat to Excel format patterns 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 0000000000000000000000000000000000000000..1989a6a1d3d6f7cc97511a8cec236a121308ac35 GIT binary patch literal 16384 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 Lqy(2bpXL7-$M?u4 literal 0 HcmV?d00001 -- 2.39.5