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
commit 070222a6a968aca6aff6fdf438379dfe4723e7e0 Author: tallison <[email protected]> AuthorDate: Wed Jul 14 10:19:25 2021 -0400 TIKA-3477 -- don't close embedded word doc because that in turn closes the root. Unrelated issue, avoid NPE if ooxml part doesn't exist. --- .../apache/tika/parser/microsoft/WordExtractor.java | 19 ++++++++++--------- .../microsoft/ooxml/AbstractOOXMLExtractor.java | 3 +++ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java index f8ff5e1..7816073 100644 --- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java +++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/WordExtractor.java @@ -85,11 +85,8 @@ public class WordExtractor extends AbstractPOIFSExtractor { private final Deque<FormattingUtils.Tag> formattingState = new ArrayDeque<>(); - private final Metadata metadata; - public WordExtractor(ParseContext context, Metadata metadata) { - super(context); - this.metadata = metadata; + super(context, metadata); } private static int countParagraphs(Range... ranges) { @@ -218,14 +215,16 @@ public class WordExtractor extends AbstractPOIFSExtractor { p = pictures.nextUnclaimed(); } - // Handle any embeded office documents + // Handle any embedded office documents try { + DirectoryEntry op = (DirectoryEntry) root.getEntry("ObjectPool"); for (Entry entry : op) { if (entry.getName().startsWith("_") && entry instanceof DirectoryEntry) { handleEmbeddedOfficeDoc((DirectoryEntry) entry, xhtml); } } + } catch (FileNotFoundException e) { //swallow } @@ -237,7 +236,7 @@ public class WordExtractor extends AbstractPOIFSExtractor { return; } for (SavedByEntry sbe : savedByTable.getEntries()) { - metadata.add(TikaCoreProperties.ORIGINAL_RESOURCE_NAME, sbe.getSaveLocation()); + parentMetadata.add(TikaCoreProperties.ORIGINAL_RESOURCE_NAME, sbe.getSaveLocation()); } } @@ -596,9 +595,11 @@ public class WordExtractor extends AbstractPOIFSExtractor { protected void parseWord6(DirectoryNode root, XHTMLContentHandler xhtml) throws IOException, SAXException { Word6Extractor extractor; - try (HWPFOldDocument doc = new HWPFOldDocument(root)) { - extractor = new Word6Extractor(doc); - } + //DO NOT put this in a try/autoclose. This will close the root + //which we don't want to do because there may be other + //documents in the root. + HWPFOldDocument doc = new HWPFOldDocument(root); + extractor = new Word6Extractor(doc); for (String p : extractor.getParagraphText()) { xhtml.element("p", p); 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 cd6c6e5..f23ae12 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 @@ -167,6 +167,9 @@ public abstract class AbstractOOXMLExtractor implements OOXMLExtractor { for (PackageRelationship rel : opcPackage .getRelationshipsByType(PackageRelationshipTypes.THUMBNAIL)) { PackagePart tPart = opcPackage.getPart(rel); + if (tPart == null) { + continue; + } InputStream tStream = tPart.getInputStream(); Metadata thumbnailMetadata = new Metadata(); String thumbName = tPart.getPartName().getName();
