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>'].