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 2017/03/21 19:18:22 UTC

[tika] branch master updated: TIKA-2300 include exception for streams that can't be read in pkg parser via Aeham Abushwashi

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

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

The following commit(s) were added to refs/heads/master by this push:
       new  f55b87f   TIKA-2300 include exception for streams that can't be read in pkg parser via Aeham Abushwashi
f55b87f is described below

commit f55b87fc5cb91a9e9ee067e3c1c68dff691d48a5
Author: tballison <ta...@mitre.org>
AuthorDate: Tue Mar 21 15:18:13 2017 -0400

    TIKA-2300 include exception for streams that can't be read in pkg parser via Aeham Abushwashi
---
 .../org/apache/tika/parser/pkg/PackageParser.java  |  23 +++++++++++++++++----
 .../org/apache/tika/parser/pkg/ZipParserTest.java  |  15 ++++++++++++++
 .../resources/test-documents/testZipEncrypted.zip  | Bin 0 -> 391 bytes
 3 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/pkg/PackageParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/pkg/PackageParser.java
index 76c6fe1..470d841 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/pkg/PackageParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/pkg/PackageParser.java
@@ -38,6 +38,7 @@ import org.apache.commons.compress.archivers.sevenz.SevenZFile;
 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
 import org.apache.commons.compress.archivers.zip.UnsupportedZipFeatureException;
 import org.apache.commons.compress.archivers.zip.UnsupportedZipFeatureException.Feature;
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
 import org.apache.commons.io.input.CloseShieldInputStream;
 import org.apache.tika.exception.EncryptedDocumentException;
@@ -129,6 +130,7 @@ public class PackageParser extends AbstractParser {
             // At the end we want to close the archive stream to release
             // any associated resources, but the underlying document stream
             // should not be closed
+
             ais = factory.createArchiveInputStream(new CloseShieldInputStream(stream));
             
         } catch (StreamingNotSupportedException sne) {
@@ -177,7 +179,7 @@ public class PackageParser extends AbstractParser {
             ArchiveEntry entry = ais.getNextEntry();
             while (entry != null) {
                 if (!entry.isDirectory()) {
-                    parseEntry(ais, entry, extractor, xhtml);
+                    parseEntry(ais, entry, extractor, metadata, xhtml);
                 }
                 entry = ais.getNextEntry();
             }
@@ -199,7 +201,7 @@ public class PackageParser extends AbstractParser {
 
     private void parseEntry(
             ArchiveInputStream archive, ArchiveEntry entry,
-            EmbeddedDocumentExtractor extractor, XHTMLContentHandler xhtml)
+            EmbeddedDocumentExtractor extractor, Metadata parentMetadata, XHTMLContentHandler xhtml)
             throws SAXException, IOException, TikaException {
         String name = entry.getName();
         if (archive.canReadEntryData(entry)) {
@@ -219,8 +221,21 @@ public class PackageParser extends AbstractParser {
                     tmp.dispose();
                 }
             }
-        } else if (name != null && name.length() > 0) {
-            xhtml.element("p", name);
+        } else {
+            name = (name == null) ? "" : name;
+            if (entry instanceof ZipArchiveEntry) {
+                boolean usesEncryption = ((ZipArchiveEntry) entry).getGeneralPurposeBit().usesEncryption();
+                if (usesEncryption) {
+                    EmbeddedDocumentUtil.recordEmbeddedStreamException(
+                            new EncryptedDocumentException("stream ("+name+") is encrypted"), parentMetadata);
+                }
+            } else {
+                EmbeddedDocumentUtil.recordEmbeddedStreamException(
+                        new TikaException("Can't read archive stream ("+name+")"), parentMetadata);
+            }
+            if (name.length() > 0) {
+                xhtml.element("p", name);
+            }
         }
     }
     
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/pkg/ZipParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/pkg/ZipParserTest.java
index 9c53d43..f9b7a66 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/pkg/ZipParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/pkg/ZipParserTest.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.io.InputStream;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import org.apache.commons.codec.binary.Base64;
@@ -31,9 +32,11 @@ import org.apache.tika.Tika;
 import org.apache.tika.extractor.EmbeddedDocumentExtractor;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.AutoDetectParser;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.Parser;
+import org.apache.tika.parser.RecursiveParserWrapper;
 import org.apache.tika.sax.BodyContentHandler;
 import org.junit.Test;
 import org.xml.sax.ContentHandler;
@@ -198,4 +201,16 @@ public class ZipParserTest extends AbstractPkgTest {
                 tracker.filenames.get(0));
     }
 
+    @Test
+    public void testZipEncrypted() throws Exception {
+        List<Metadata> metadataList = getRecursiveMetadata("testZipEncrypted.zip");
+        assertEquals(2, metadataList.size());
+        String[] values = metadataList.get(0).getValues(TikaCoreProperties.TIKA_META_EXCEPTION_EMBEDDED_STREAM);
+        assertNotNull(values);
+        assertEquals(1, values.length);
+        assertContains("EncryptedDocumentException: stream (encrypted.txt) is encrypted", values[0]);
+
+
+        assertContains("hello world", metadataList.get(1).get(RecursiveParserWrapper.TIKA_CONTENT));
+    }
 }
diff --git a/tika-parsers/src/test/resources/test-documents/testZipEncrypted.zip b/tika-parsers/src/test/resources/test-documents/testZipEncrypted.zip
new file mode 100644
index 0000000..2be04a8
Binary files /dev/null and b/tika-parsers/src/test/resources/test-documents/testZipEncrypted.zip differ

-- 
To stop receiving notification emails like this one, please contact
['"commits@tika.apache.org" <co...@tika.apache.org>'].