From 936bf2f9b35abc7e54945f163745a594e32d9a57 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Mon, 12 Sep 2011 13:03:04 +0000 Subject: [PATCH] fixed bug 51670: avoid LeftoverDataException when reading .xls files with invalid LabelRecord git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1169725 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../org/apache/poi/hssf/record/LabelRecord.java | 13 ++++++++++++- .../org/apache/poi/hssf/usermodel/TestBugs.java | 6 ++++++ test-data/spreadsheet/51670.xls | Bin 0 -> 15360 bytes 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test-data/spreadsheet/51670.xls diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 47bcd10b50..d8a08883d1 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 51670 - avoid LeftoverDataException when reading .xls files with invalid LabelRecords 51196 - prevent NPE in XWPFPicture.getPictureData() 51771 - prevent NPE when getting object data from OLEShape in HSLF 51196 - more progress with Chart APi in XSSF diff --git a/src/java/org/apache/poi/hssf/record/LabelRecord.java b/src/java/org/apache/poi/hssf/record/LabelRecord.java index 9661f991f4..4d2570272b 100644 --- a/src/java/org/apache/poi/hssf/record/LabelRecord.java +++ b/src/java/org/apache/poi/hssf/record/LabelRecord.java @@ -18,6 +18,8 @@ package org.apache.poi.hssf.record; import org.apache.poi.util.HexDump; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; /** * Label Record (0x0204) - read only support for strings stored directly in the cell.. Don't @@ -29,6 +31,8 @@ import org.apache.poi.util.HexDump; * @see org.apache.poi.hssf.record.LabelSSTRecord */ public final class LabelRecord extends Record implements CellValueRecordInterface { + private final static POILogger logger = POILogFactory.getLogger(LabelRecord.class); + public final static short sid = 0x0204; private int field_1_row; @@ -62,6 +66,13 @@ public final class LabelRecord extends Record implements CellValueRecordInterfac } else { field_6_value = ""; } + + if (in.remaining() > 0) { + logger.log(POILogger.INFO, + "LabelRecord data remains: " + in.remaining() + + " : " + HexDump.toHex(in.readRemainder()) + ); + } } /* @@ -97,7 +108,7 @@ public final class LabelRecord extends Record implements CellValueRecordInterfac */ public boolean isUnCompressedUnicode() { - return (field_5_unicode_flag == 1); + return (field_5_unicode_flag & 0x01) != 0; } /** diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index d53e50783e..e64cd7240b 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -2173,4 +2173,10 @@ if(1==2) { assertTrue(text.contains("Bottom Right Cell")); } } + + public void test51670() { + HSSFWorkbook wb = openSample("51670.xls"); + writeOutAndReadBack(wb); + } + } diff --git a/test-data/spreadsheet/51670.xls b/test-data/spreadsheet/51670.xls new file mode 100644 index 0000000000000000000000000000000000000000..e7c929d9e593e36146b06763066e5f9d3fc1cd94 GIT binary patch literal 15360 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 Nd28~RAFnUm{tf7XR!{%{ literal 0 HcmV?d00001