You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2023/07/24 13:39:15 UTC

[tika] branch main updated: TIKA-4101 -- fix regression in identifying ms equation OLE bundles. Unrelated (sorry), do not add period to attachment if the extension is empty. (#1251)

This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new 1d2ba2c98 TIKA-4101 -- fix regression in identifying ms equation OLE bundles. Unrelated (sorry), do not add period to attachment if the extension is empty. (#1251)
1d2ba2c98 is described below

commit 1d2ba2c985de666ebc7e5bcc2de96ac9b96aa0ae
Author: Tim Allison <ta...@apache.org>
AuthorDate: Mon Jul 24 09:39:08 2023 -0400

    TIKA-4101 -- fix regression in identifying ms equation OLE bundles. Unrelated (sorry), do not add period to attachment if the extension is empty. (#1251)
---
 .../tika/detect/microsoft/POIFSContainerDetector.java    |  4 ++--
 .../tika/parser/microsoft/AbstractPOIFSExtractor.java    | 16 ++++++++++++++--
 .../parser/microsoft/ooxml/AbstractOOXMLExtractor.java   | 16 ++++++++++++++++
 3 files changed, 32 insertions(+), 4 deletions(-)

diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/POIFSContainerDetector.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/POIFSContainerDetector.java
index 1cc47ba13..23648c884 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/POIFSContainerDetector.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/POIFSContainerDetector.java
@@ -341,6 +341,8 @@ public class POIFSContainerDetector implements Detector {
         } else if (ucNames.contains(CONTENTS) && ucNames.contains(SPELLING)) {
             // Newer Works files
             return WPS;
+        } else if (ucNames.contains(EQUATION_NATIVE)) {
+            return MS_EQUATION;
         } else if (ucNames.contains(CONTENTS) && ucNames.contains(OBJ_INFO)) {
             return COMP_OBJ;
         } else if (ucNames.contains(CONTENTS) && ucNames.contains(COMP_OBJ_STRING)) {
@@ -372,8 +374,6 @@ public class POIFSContainerDetector implements Detector {
                     return MPP;
                 }
             }
-        } else if (ucNames.contains(EQUATION_NATIVE)) {
-            return MS_EQUATION;
         } else if (ucNames.contains(LAYER)) {
             //in one test file, also saw LayerSmallImage and LayerLargeImage
             //maybe add those if we get false positives?
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractPOIFSExtractor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractPOIFSExtractor.java
index 7a14733e8..fa464b902 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractPOIFSExtractor.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/AbstractPOIFSExtractor.java
@@ -45,6 +45,7 @@ import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.PasswordProvider;
 import org.apache.tika.parser.microsoft.OfficeParser.POIFSDocumentType;
 import org.apache.tika.sax.XHTMLContentHandler;
+import org.apache.tika.utils.StringUtils;
 
 abstract class AbstractPOIFSExtractor {
     protected final Metadata parentMetadata;//metadata of the parent/container document
@@ -204,8 +205,14 @@ abstract class AbstractPOIFSExtractor {
             handleCompObj(dir, type, rName, metadata, xhtml, outputHtml);
         } else {
             metadata.set(Metadata.CONTENT_TYPE, type.getType().toString());
-            metadata.set(TikaCoreProperties.RESOURCE_NAME_KEY,
-                    rName + '.' + type.getExtension());
+            if (! StringUtils.isBlank(rName)) {
+                if (StringUtils.isBlank(type.getExtension())) {
+                    metadata.set(TikaCoreProperties.RESOURCE_NAME_KEY, rName);
+                } else {
+                    metadata.set(TikaCoreProperties.RESOURCE_NAME_KEY,
+                            rName + '.' + type.getExtension());
+                }
+            }
             parseEmbedded(dir, xhtml, metadata, outputHtml);
         }
     }
@@ -219,6 +226,10 @@ abstract class AbstractPOIFSExtractor {
 
         // Grab the contents and process
         DocumentEntry contentsEntry;
+        /*if (dir.hasEntry("CorelDRAW")) {
+            contentsEntry = (DocumentEntry) dir.getEntry("CorelDRAW");}
+         */
+        //TODO: modify getEntry to case insensitive when available in POI
         try {
             contentsEntry = (DocumentEntry) dir.getEntry("CONTENTS");
         } catch (FileNotFoundException fnfe1) {
@@ -229,6 +240,7 @@ abstract class AbstractPOIFSExtractor {
                 return;
             }
         }
+
         int length = contentsEntry.getSize();
         DocumentInputStream inp = null;
         try {
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java
index 0493a2bd8..55d3893e6 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/AbstractOOXMLExtractor.java
@@ -63,6 +63,7 @@ import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.microsoft.OfficeParser;
 import org.apache.tika.parser.microsoft.OfficeParser.POIFSDocumentType;
 import org.apache.tika.parser.microsoft.OfficeParserConfig;
+import org.apache.tika.parser.microsoft.SummaryExtractor;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
 import org.apache.tika.utils.ExceptionUtils;
@@ -337,9 +338,16 @@ public abstract class AbstractOOXMLExtractor implements OOXMLExtractor {
             POIFSDocumentType type = POIFSDocumentType.detectType(root);
 
             String packageEntryName = getPackageEntryName(root);
+            try {
+                SummaryExtractor summaryExtractor = new SummaryExtractor(metadata);
+                summaryExtractor.parseSummaries(root);
+            } catch (TikaException e) {
+                //swallow -- things happened
+            }
             if (packageEntryName != null) {
                 //OLE 2.0
                 updateMetadata(metadata, embeddedPartMetadata);
+
                 stream = TikaInputStream.get(fs.createDocumentInputStream(packageEntryName));
                 if (embeddedExtractor.shouldParseEmbedded(metadata)) {
                     embeddedExtractor
@@ -412,6 +420,14 @@ public abstract class AbstractOOXMLExtractor implements OOXMLExtractor {
         if (root.hasEntry("package")) {
             return "package";
         }
+        /*
+            raw CorelDraw stream may be in an ole bundle
+            but there can be other resources for the image
+            in other streams under root...think about this...
+            see: AZG2X4VXB3KIEDT3OVZC4R645KU5VSOF
+        if (root.hasEntry("CorelDRAW")) {
+            return "CorelDRAW";
+        }*/
         return null;
     }