From: Dominik Stadler Date: Wed, 4 Apr 2018 19:41:16 +0000 (+0000) Subject: Close resources correctly when opening encrypted documents in the TextExtractor X-Git-Tag: REL_4_0_0_FINAL~198 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1079e66ea7cc4a53d4d4a7e54a615bddbfeaaa12;p=poi.git Close resources correctly when opening encrypted documents in the TextExtractor git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1828378 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java b/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java index db98f2e905..910baf6a64 100644 --- a/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java +++ b/src/ooxml/java/org/apache/poi/extractor/ExtractorFactory.java @@ -132,7 +132,7 @@ public class ExtractorFactory { try { fs = new NPOIFSFileSystem(f); if (fs.getRoot().hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) { - return createEncyptedOOXMLExtractor(fs); + return createEncryptedOOXMLExtractor(fs); } POIOLE2TextExtractor extractor = createExtractor(fs); extractor.setFilesystem(fs); @@ -161,7 +161,7 @@ public class ExtractorFactory { case OLE2: NPOIFSFileSystem fs = new NPOIFSFileSystem(is); boolean isEncrypted = fs.getRoot().hasEntry(Decryptor.DEFAULT_POIFS_ENTRY); - return isEncrypted ? createEncyptedOOXMLExtractor(fs) : createExtractor(fs); + return isEncrypted ? createEncryptedOOXMLExtractor(fs) : createExtractor(fs); case OOXML: return createExtractor(OPCPackage.open(is)); default: @@ -403,7 +403,7 @@ public class ExtractorFactory { throw new IllegalStateException("Not yet supported"); } - private static POIXMLTextExtractor createEncyptedOOXMLExtractor(NPOIFSFileSystem fs) + private static POIXMLTextExtractor createEncryptedOOXMLExtractor(NPOIFSFileSystem fs) throws IOException { String pass = Biff8EncryptionKey.getCurrentUserPassword(); if (pass == null) { @@ -425,6 +425,10 @@ public class ExtractorFactory { throw new EncryptedDocumentException(e); } finally { IOUtils.closeQuietly(is); + + // also close the NPOIFSFileSystem here as we read all the data + // while decrypting + fs.close(); } } }