You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2020/08/14 20:26:21 UTC
svn commit: r1880861 - in /poi/trunk/src: java/org/apache/poi/extractor/
java/org/apache/poi/poifs/filesystem/ java/org/apache/poi/sl/usermodel/
java/org/apache/poi/ss/usermodel/ ooxml/java/org/apache/poi/ooxml/extractor/
Author: kiwiwings
Date: Fri Aug 14 20:26:21 2020
New Revision: 1880861
URL: http://svn.apache.org/viewvc?rev=1880861&view=rev
Log:
also handle wrapped OOXML "Package" nodes inside of OLE2 containers
Modified:
poi/trunk/src/java/org/apache/poi/extractor/ExtractorFactory.java
poi/trunk/src/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
poi/trunk/src/java/org/apache/poi/sl/usermodel/SlideShowFactory.java
poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
poi/trunk/src/ooxml/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java
Modified: poi/trunk/src/java/org/apache/poi/extractor/ExtractorFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/extractor/ExtractorFactory.java?rev=1880861&r1=1880860&r2=1880861&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/extractor/ExtractorFactory.java (original)
+++ poi/trunk/src/java/org/apache/poi/extractor/ExtractorFactory.java Fri Aug 14 20:26:21 2020
@@ -53,6 +53,13 @@ import org.apache.poi.util.POILogger;
*/
@SuppressWarnings({"WeakerAccess", "JavadocReference"})
public final class ExtractorFactory {
+ /**
+ * Some OPCPackages are packed in side an OLE2 container.
+ * If encrypted, the {@link DirectoryNode} is called {@link Decryptor#DEFAULT_POIFS_ENTRY "EncryptedPackage"},
+ * otherwise the node is called "Packge"
+ */
+ public static final String OOXML_PACKAGE = "Package";
+
private static final POILogger LOGGER = POILogFactory.getLogger(ExtractorFactory.class);
/** Should this thread prefer event based over usermodel based extractors? */
@@ -215,7 +222,7 @@ public final class ExtractorFactory {
public static POITextExtractor createExtractor(final DirectoryNode root, String password) throws IOException {
// Encrypted OOXML files go inside OLE2 containers, is this one?
- if (root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntry("Package")) {
+ if (root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE)) {
return wp(FileMagic.OOXML, w -> w.create(root, password));
} else {
return wp(FileMagic.OLE2, w -> w.create(root, password));
Modified: poi/trunk/src/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java?rev=1880861&r1=1880860&r2=1880861&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/filesystem/DocumentFactoryHelper.java Fri Aug 14 20:26:21 2020
@@ -17,6 +17,8 @@
package org.apache.poi.poifs.filesystem;
+import static org.apache.poi.extractor.ExtractorFactory.OOXML_PACKAGE;
+
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -69,7 +71,12 @@ public final class DocumentFactoryHelper
* @throws IOException If an error occurs while decrypting or if the password does not match
*/
public static InputStream getDecryptedStream(final DirectoryNode root, String password)
- throws IOException {
+ throws IOException {
+ // first check if the node contains an plain package
+ if (root.hasEntry(OOXML_PACKAGE)) {
+ return root.createDocumentInputStream(OOXML_PACKAGE);
+ }
+
EncryptionInfo info = new EncryptionInfo(root);
Decryptor d = Decryptor.getInstance(info);
@@ -97,11 +104,11 @@ public final class DocumentFactoryHelper
/**
* Checks that the supplied InputStream (which MUST
* support mark and reset) has a OOXML (zip) header at the start of it.<p>
- *
+ *
* If unsure if your InputStream does support mark / reset,
* use {@link FileMagic#prepareToCheckMagic(InputStream)} to wrap it and make
* sure to always use that, and not the original!
- *
+ *
* @param inp An InputStream which supports either mark/reset
*
* @deprecated in 3.17-beta2, use {@link FileMagic#valueOf(InputStream)} == FileMagic.OOXML instead
Modified: poi/trunk/src/java/org/apache/poi/sl/usermodel/SlideShowFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/sl/usermodel/SlideShowFactory.java?rev=1880861&r1=1880860&r2=1880861&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/sl/usermodel/SlideShowFactory.java (original)
+++ poi/trunk/src/java/org/apache/poi/sl/usermodel/SlideShowFactory.java Fri Aug 14 20:26:21 2020
@@ -16,6 +16,7 @@
==================================================================== */
package org.apache.poi.sl.usermodel;
+import static org.apache.poi.extractor.ExtractorFactory.OOXML_PACKAGE;
import static org.apache.poi.poifs.crypt.EncryptionInfo.ENCRYPTION_INFO_ENTRY;
import java.io.BufferedInputStream;
@@ -123,7 +124,7 @@ public final class SlideShowFactory {
*/
public static SlideShow<?,?> create(final DirectoryNode root, String password) throws IOException {
// Encrypted OOXML files go inside OLE2 containers, is this one?
- if (root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) {
+ if (root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE)) {
return wp(FileMagic.OOXML, w -> w.create(root, password));
} else {
return wp(FileMagic.OLE2, w -> w.create(root, password));
@@ -269,7 +270,8 @@ public final class SlideShowFactory {
} else if (fm == FileMagic.OLE2) {
final boolean ooxmlEnc;
try (POIFSFileSystem fs = new POIFSFileSystem(file, true)) {
- ooxmlEnc = fs.getRoot().hasEntry(Decryptor.DEFAULT_POIFS_ENTRY);
+ DirectoryNode root = fs.getRoot();
+ ooxmlEnc = root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE);
}
return wp(ooxmlEnc ? FileMagic.OOXML : fm, w -> w.create(file, password, readOnly));
}
Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java?rev=1880861&r1=1880860&r2=1880861&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/WorkbookFactory.java Fri Aug 14 20:26:21 2020
@@ -16,6 +16,7 @@
==================================================================== */
package org.apache.poi.ss.usermodel;
+import static org.apache.poi.extractor.ExtractorFactory.OOXML_PACKAGE;
import static org.apache.poi.poifs.crypt.EncryptionInfo.ENCRYPTION_INFO_ENTRY;
import java.io.BufferedInputStream;
@@ -130,7 +131,7 @@ public final class WorkbookFactory {
*/
public static Workbook create(final DirectoryNode root, String password) throws IOException {
// Encrypted OOXML files go inside OLE2 containers, is this one?
- if (root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY)) {
+ if (root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE)) {
return wp(FileMagic.OOXML, w -> w.create(root, password));
} else {
return wp(FileMagic.OLE2, w -> w.create(root, password));
@@ -276,7 +277,8 @@ public final class WorkbookFactory {
} else if (fm == FileMagic.OLE2) {
final boolean ooxmlEnc;
try (POIFSFileSystem fs = new POIFSFileSystem(file, true)) {
- ooxmlEnc = fs.getRoot().hasEntry(Decryptor.DEFAULT_POIFS_ENTRY);
+ DirectoryNode root = fs.getRoot();
+ ooxmlEnc = root.hasEntry(Decryptor.DEFAULT_POIFS_ENTRY) || root.hasEntry(OOXML_PACKAGE);
}
return wp(ooxmlEnc ? FileMagic.OOXML : fm, w -> w.create(file, password, readOnly));
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java?rev=1880861&r1=1880860&r2=1880861&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/ooxml/extractor/POIXMLExtractorFactory.java Fri Aug 14 20:26:21 2020
@@ -16,6 +16,8 @@
==================================================================== */
package org.apache.poi.ooxml.extractor;
+import static org.apache.poi.extractor.ExtractorFactory.OOXML_PACKAGE;
+
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -253,8 +255,8 @@ public final class POIXMLExtractorFactor
@Override
public POITextExtractor create(DirectoryNode poifsDir, String password) throws IOException {
// First, check for plain OOXML package
- if (poifsDir.hasEntry("Package")) {
- try (InputStream is = poifsDir.createDocumentInputStream("Package")) {
+ if (poifsDir.hasEntry(OOXML_PACKAGE)) {
+ try (InputStream is = poifsDir.createDocumentInputStream(OOXML_PACKAGE)) {
return create(is, password);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org