From 93b1f0664c3123734f0676aba660eedbed451c9c Mon Sep 17 00:00:00 2001 From: Tim Allison Date: Fri, 14 Jul 2017 13:54:06 +0000 Subject: [PATCH] bug 61286/bug 61287 -- allow WriteProtectRecord to have 2 bytes, and allow for HeaderFooter to be empty. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1801966 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/record/HeaderFooterBase.java | 7 +++++++ .../poi/hssf/record/WriteProtectRecord.java | 3 +++ .../org/apache/poi/hssf/usermodel/TestBugs.java | 13 +++++++++++-- test-data/spreadsheet/61287.xls | Bin 0 -> 11776 bytes 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 test-data/spreadsheet/61287.xls diff --git a/src/java/org/apache/poi/hssf/record/HeaderFooterBase.java b/src/java/org/apache/poi/hssf/record/HeaderFooterBase.java index 53d5f46926..d0e23c73b0 100644 --- a/src/java/org/apache/poi/hssf/record/HeaderFooterBase.java +++ b/src/java/org/apache/poi/hssf/record/HeaderFooterBase.java @@ -36,6 +36,13 @@ public abstract class HeaderFooterBase extends StandardRecord { protected HeaderFooterBase(RecordInputStream in) { if (in.remaining() > 0) { int field_1_footer_len = in.readShort(); + //61287 -- if the footer_len == 0, there may not be a multibyte flag + if (field_1_footer_len == 0) { + field_3_text = ""; + if (in.remaining() == 0) { + return; + } + } field_2_hasMultibyte = in.readByte() != 0x00; if (field_2_hasMultibyte) { diff --git a/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java b/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java index 14afeedc37..e958adb5eb 100644 --- a/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java +++ b/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java @@ -37,6 +37,9 @@ public final class WriteProtectRecord extends StandardRecord { */ public WriteProtectRecord(RecordInputStream in) { + if (in.remaining() == 2) { + in.readShort(); + } } public String toString() diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index d4abaf59a5..54b8f4a96d 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -26,6 +26,7 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -43,8 +44,6 @@ import java.util.List; import java.util.Locale; import java.util.TimeZone; -import javax.imageio.ImageIO; - import org.apache.poi.EncryptedDocumentException; import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.HSSFTestDataSamples; @@ -3096,4 +3095,14 @@ public final class TestBugs extends BaseTestBugzillaIssues { wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); wb.close(); } + + @Test + public void test61287() throws IOException { + final Workbook wb = HSSFTestDataSamples.openSampleWorkbook("61287.xls"); + ExcelExtractor ex = new ExcelExtractor((HSSFWorkbook)wb); + String text = ex.getText(); + assertContains(text, "资产负债表"); + wb.close(); + } + } diff --git a/test-data/spreadsheet/61287.xls b/test-data/spreadsheet/61287.xls new file mode 100644 index 0000000000000000000000000000000000000000..4d35295e35087c0dce61e406443b219426693d92 GIT binary patch literal 11776 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 v1)^Erwd1nXi_T#IVLlgb-k5qM&2KjvuK_