]> source.dussan.org Git - poi.git/commitdiff
bug 60685: ignore problems with HPBF Publisher Quill Contents PLC hyperlink records...
authorJaven O'Neal <onealj@apache.org>
Mon, 10 Jul 2017 01:34:30 +0000 (01:34 +0000)
committerJaven O'Neal <onealj@apache.org>
Mon, 10 Jul 2017 01:34:30 +0000 (01:34 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1801405 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hpbf/model/QuillContents.java
test-data/publisher/60685.pub [new file with mode: 0644]

index f813b9455cf0851620bb048985460d76c1d55eb5..439055c8aa12036039124eb561b8ecedb57d06f4 100644 (file)
@@ -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 (file)
index 0000000..37d3dce
Binary files /dev/null and b/test-data/publisher/60685.pub differ