From: Javen O'Neal Date: Mon, 10 Jul 2017 01:34:30 +0000 (+0000) Subject: bug 60685: ignore problems with HPBF Publisher Quill Contents PLC hyperlink records... X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1137099aa3ba4068d09e0bf3e3548335f992988c;p=poi.git bug 60685: ignore problems with HPBF Publisher Quill Contents PLC hyperlink records so that text extraction can continue git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1801405 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/scratchpad/src/org/apache/poi/hpbf/model/QuillContents.java b/src/scratchpad/src/org/apache/poi/hpbf/model/QuillContents.java index f813b9455c..439055c8aa 100644 --- a/src/scratchpad/src/org/apache/poi/hpbf/model/QuillContents.java +++ b/src/scratchpad/src/org/apache/poi/hpbf/model/QuillContents.java @@ -26,11 +26,15 @@ import org.apache.poi.hpbf.model.qcbits.UnknownQCBit; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LocaleUtil; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; /** * Read Quill Contents (/Quill/QuillSub/CONTENTS) from an HPBF (Publisher .pub) document */ public final class QuillContents extends HPBFPart { + private static POILogger logger = POILogFactory.getLogger(QuillContents.class); + private static final String[] PATH = { "Quill", "QuillSub", "CONTENTS", }; private QCBit[] bits; @@ -69,7 +73,13 @@ public final class QuillContents extends HPBFPart { if(bitType.equals("TEXT")) { bits[i] = new QCTextBit(thingType, bitType, bitData); } else if(bitType.equals("PLC ")) { - bits[i] = QCPLCBit.createQCPLCBit(thingType, bitType, bitData); + try { + bits[i] = QCPLCBit.createQCPLCBit(thingType, bitType, bitData); + } catch (ArrayIndexOutOfBoundsException e) { + // bug 60685: fall back so that the rest of the document can be read + logger.log(POILogger.WARN, "Unable to read Quill Contents PLC Bit record. Ignoring this record."); + bits[i] = new UnknownQCBit(thingType, bitType, bitData); + } } else { bits[i] = new UnknownQCBit(thingType, bitType, bitData); } diff --git a/test-data/publisher/60685.pub b/test-data/publisher/60685.pub new file mode 100644 index 0000000000..37d3dce70e Binary files /dev/null and b/test-data/publisher/60685.pub differ