Skip to content

Commit 484eddc

Browse files
authored
Revert "Revert "TIKA-4474 -- force spooling on ooxml"" (#2388)
* Revert "Revert "TIKA-4474 -- force spooling on ooxml (#2386)" (#2387)" This reverts commit f00dbce. * TIKA-4474 -- force spooling for xml checkstyle * TIKA-4474 -- remove monster file from multithreaded tests
1 parent 937b6d5 commit 484eddc

4 files changed

Lines changed: 20 additions & 48 deletions

File tree

tika-core/src/test/java/org/apache/tika/TikaTest.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,10 @@
4242

4343
import org.apache.commons.io.IOUtils;
4444
import org.xml.sax.ContentHandler;
45+
import org.xml.sax.SAXException;
4546

4647
import org.apache.tika.config.TikaConfig;
48+
import org.apache.tika.exception.WriteLimitReachedException;
4749
import org.apache.tika.extractor.EmbeddedResourceHandler;
4850
import org.apache.tika.io.FilenameUtils;
4951
import org.apache.tika.io.TikaInputStream;
@@ -569,10 +571,12 @@ protected String getText(String filePath, Parser parser, Metadata metadata,
569571
public String getText(InputStream is, Parser parser, ParseContext context, Metadata metadata)
570572
throws Exception {
571573
ContentHandler handler = new BodyContentHandler(1000000);
572-
try {
574+
try (is) {
573575
parser.parse(is, handler, metadata, context);
574-
} finally {
575-
is.close();
576+
} catch (SAXException e) {
577+
if (!WriteLimitReachedException.isWriteLimitReached(e)) {
578+
throw e;
579+
}
576580
}
577581
return handler.toString();
578582
}

tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,12 @@
1616
*/
1717
package org.apache.tika.parser.microsoft.ooxml;
1818

19-
import java.io.EOFException;
2019
import java.io.File;
2120
import java.io.IOException;
2221
import java.io.InputStream;
2322
import java.nio.file.Files;
2423
import java.util.Locale;
2524

26-
import org.apache.commons.compress.archivers.zip.UnsupportedZipFeatureException;
27-
import org.apache.commons.io.input.CloseShieldInputStream;
2825
import org.apache.poi.extractor.ExtractorFactory;
2926
import org.apache.poi.ooxml.POIXMLDocument;
3027
import org.apache.poi.ooxml.extractor.POIXMLExtractorFactory;
@@ -64,7 +61,6 @@
6461
import org.apache.tika.parser.microsoft.ooxml.xps.XPSTextExtractor;
6562
import org.apache.tika.parser.microsoft.ooxml.xslf.XSLFEventBasedPowerPointExtractor;
6663
import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFEventBasedWordExtractor;
67-
import org.apache.tika.utils.RereadableInputStream;
6864
import org.apache.tika.zip.utils.ZipSalvager;
6965

7066
/**
@@ -105,10 +101,10 @@ public static void parse(InputStream stream, ContentHandler baseHandler, Metadat
105101
OOXMLExtractor extractor = null;
106102

107103
// Locate or Open the OPCPackage for the file
108-
TikaInputStream tis = TikaInputStream.cast(stream);
109-
if (tis != null && tis.getOpenContainer() instanceof OPCPackageWrapper) {
104+
TikaInputStream tis = TikaInputStream.get(stream);
105+
if (tis.getOpenContainer() instanceof OPCPackageWrapper) {
110106
pkg = ((OPCPackageWrapper) tis.getOpenContainer()).getOPCPackage();
111-
} else if (tis != null && tis.hasFile()) {
107+
} else {
112108
try {
113109
pkg = OPCPackage.open(tis.getFile().getPath(), PackageAccess.READ);
114110
} catch (InvalidOperationException e) {
@@ -117,44 +113,6 @@ public static void parse(InputStream stream, ContentHandler baseHandler, Metadat
117113
pkg = OPCPackage.open(tmpRepairedCopy, PackageAccess.READ);
118114
}
119115
tis.setOpenContainer(new OPCPackageWrapper(pkg));
120-
} else {
121-
//OPCPackage slurps rris into memory so we can close rris
122-
//without apparent problems
123-
mustRevertPackage = true;
124-
try (RereadableInputStream rereadableInputStream = new RereadableInputStream(stream,
125-
MAX_BUFFER_LENGTH, false)) {
126-
try {
127-
pkg = OPCPackage.open(CloseShieldInputStream.wrap(rereadableInputStream));
128-
} catch (UnsupportedZipFeatureException e) {
129-
if (e.getFeature() !=
130-
UnsupportedZipFeatureException.Feature.DATA_DESCRIPTOR) {
131-
throw e;
132-
}
133-
rereadableInputStream.rewind();
134-
tmpRepairedCopy = Files.createTempFile("tika-ooxml-repair-", "").toFile();
135-
ZipSalvager.salvageCopy(rereadableInputStream, tmpRepairedCopy, false);
136-
//if there isn't enough left to be opened as a package
137-
//throw an exception -- we may want to fall back to streaming
138-
//parsing
139-
pkg = OPCPackage.open(tmpRepairedCopy, PackageAccess.READ);
140-
} catch (IOException e) {
141-
if (e instanceof EOFException) {
142-
//keep going
143-
} else if (e instanceof IOException && e.getMessage() != null &&
144-
e.getMessage().contains("Truncated")) {
145-
//keep going
146-
} else {
147-
throw e;
148-
}
149-
rereadableInputStream.rewind();
150-
tmpRepairedCopy = Files.createTempFile("tika-ooxml-repair-", "").toFile();
151-
ZipSalvager.salvageCopy(rereadableInputStream, tmpRepairedCopy, false);
152-
//if there isn't enough left to be opened as a package
153-
//throw an exception -- we may want to fall back to streaming
154-
//parsing
155-
pkg = OPCPackage.open(tmpRepairedCopy, PackageAccess.READ);
156-
}
157-
}
158116
}
159117

160118
if (pkg != null) {

tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/test/java/org/apache/tika/parser/microsoft/ooxml/OOXMLParserTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1795,6 +1795,9 @@ public void testMultiThreaded() throws Exception {
17951795
RecursiveParserWrapper wrapper = new RecursiveParserWrapper(AUTO_DETECT_PARSER);
17961796
testMultiThreaded(wrapper, parseContexts, numThreads, numIterations, path -> {
17971797
String pathName = path.getName().toLowerCase(Locale.ENGLISH);
1798+
if (pathName.equalsIgnoreCase("testRecordSizeExceeded.xlsx")) {
1799+
return false;
1800+
}
17981801
int i = pathName.lastIndexOf(".");
17991802
String ext = "";
18001803
if (i > -1) {
@@ -1814,4 +1817,11 @@ public void testFeatureExtraction() throws Exception {
18141817
assertEquals("true", m.get(Office.HAS_TRACK_CHANGES));
18151818
assertEquals("true", m.get(Office.HAS_COMMENTS));
18161819
}
1820+
1821+
@Test
1822+
public void testNoRecordSizeOverflow() throws Exception {
1823+
//TIKA-4474 -- test: files (passed as stream) no longer have limit on record size as they are spooled
1824+
String content = getText("testRecordSizeExceeded.xlsx");
1825+
assertContains("Repetitive content pattern 3 for compression test row 1", content);
1826+
}
18171827
}

0 commit comments

Comments
 (0)