This is an automated email from the ASF dual-hosted git repository. tballison pushed a commit to branch TIKA-4826 in repository https://gitbox.apache.org/repos/asf/tika.git
commit 38f7530693731cd3194421fe5cbf3a96b6db13ad Author: tallison <[email protected]> AuthorDate: Tue Sep 1 13:34:47 2026 -0400 TIKA-4862 - avoid caching user supplied mime info --- CHANGES.txt | 7 ++++-- .../main/java/org/apache/tika/mime/MimeTypes.java | 4 +-- .../mime/ProbabilisticMimeDetectionSelector.java | 2 -- .../org/apache/tika/mime/MimeTypesReaderTest.java | 29 ++++++++++++++-------- .../apache/tika/example/ExtractEmbeddedFiles.java | 1 + 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 9165c4b9f0..097ca38851 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,8 +6,11 @@ Release 4.1.0 - unreleased memory growth path. MimeTypes.forName is deprecated (unchanged behavior) in favor of forNameAndRegister, which names the registration side effect, and getRegisteredMimeType for - side-effect-free lookups; forName will be removed in Tika 5 - (TIKA-4826). + side-effect-free lookups; forName will be removed in Tika 5. + Extension lookup now resolves parameterized content types to their + base type, so a type such as "text/plain; charset=UTF-8" yields + ".txt" where it previously yielded ".bin"; this can change the + names written for embedded documents (TIKA-4826). * Add "exception-reporting" parse-context config to redact and bound exception text in metadata, tika-server error bodies and pipes/grpc diff --git a/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java b/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java index 83222f9f66..f815be96f5 100644 --- a/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java +++ b/tika-core/src/main/java/org/apache/tika/mime/MimeTypes.java @@ -411,11 +411,11 @@ public final class MimeTypes implements Detector, Serializable { /** * Returns the registered, normalised media type with the given name (or alias). * - * <p>Unlike {@link #forName(String)}, this function will <em>not</em> create a + * <p>Unlike {@link #forNameAndRegister(String)}, this function will <em>not</em> create a * new MimeType and register it. Instead, <code>null</code> will be returned if * there is no definition available for the given name. * - * <p>Also, unlike {@link #forName(String)}, this function may return a + * <p>Also, unlike {@link #forNameAndRegister(String)}, this function may return a * mime type that has fewer parameters than were included in the supplied name. * If the registered mime type has parameters (e.g. * <code>application/dita+xml;format=map</code>), then those will be maintained. diff --git a/tika-core/src/main/java/org/apache/tika/mime/ProbabilisticMimeDetectionSelector.java b/tika-core/src/main/java/org/apache/tika/mime/ProbabilisticMimeDetectionSelector.java index d42f4577f1..c9efaf7fdd 100644 --- a/tika-core/src/main/java/org/apache/tika/mime/ProbabilisticMimeDetectionSelector.java +++ b/tika-core/src/main/java/org/apache/tika/mime/ProbabilisticMimeDetectionSelector.java @@ -175,9 +175,7 @@ public class ProbabilisticMimeDetectionSelector implements Detector { String typeName = metadata.get(HttpHeaders.CONTENT_TYPE); if (typeName != null) { try { - // MimeType hint = forName(typeName); metaHint = mimeTypes.forNameWithoutRegistration(typeName); - // possibleTypes = applyHint(possibleTypes, hint); } catch (MimeTypeException e) { // Malformed type name, ignore } diff --git a/tika-core/src/test/java/org/apache/tika/mime/MimeTypesReaderTest.java b/tika-core/src/test/java/org/apache/tika/mime/MimeTypesReaderTest.java index cecd419e7d..37fa43387e 100644 --- a/tika-core/src/test/java/org/apache/tika/mime/MimeTypesReaderTest.java +++ b/tika-core/src/test/java/org/apache/tika/mime/MimeTypesReaderTest.java @@ -30,6 +30,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.Set; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.stream.Collectors; @@ -342,19 +343,25 @@ public class MimeTypesReaderTest { @Test public void testMultiThreaded() throws Exception { - MimeTypes mimeTypes = MimeTypes.getDefaultMimeTypes(); - Executors.newFixedThreadPool(1).execute(() -> { - try { - for (int i = 0; i < 500 && !stop; i++) { - mimeTypes.forName("abc" + i + "/abc"); + // private instance: registering 500 junk types must not leak into the shared default + MimeTypes mimeTypes = MimeTypesFactory.create("tika-mimetypes.xml"); + ExecutorService executorService = Executors.newFixedThreadPool(1); + try { + executorService.execute(() -> { + try { + for (int i = 0; i < 500 && !stop; i++) { + mimeTypes.forNameAndRegister("abc" + i + "/abc"); + } + } catch (MimeTypeException e) { + e.printStackTrace(); } - } catch (MimeTypeException e) { - e.printStackTrace(); - } - }); + }); - for (int i = 0; i < 500 & !stop; i++) { - mimeTypes.getMediaTypeRegistry().getAliases(MediaType.APPLICATION_ZIP); + for (int i = 0; i < 500 & !stop; i++) { + mimeTypes.getMediaTypeRegistry().getAliases(MediaType.APPLICATION_ZIP); + } + } finally { + executorService.shutdownNow(); } } diff --git a/tika-example/src/main/java/org/apache/tika/example/ExtractEmbeddedFiles.java b/tika-example/src/main/java/org/apache/tika/example/ExtractEmbeddedFiles.java index fb9b0745c5..24b7fee068 100644 --- a/tika-example/src/main/java/org/apache/tika/example/ExtractEmbeddedFiles.java +++ b/tika-example/src/main/java/org/apache/tika/example/ExtractEmbeddedFiles.java @@ -35,6 +35,7 @@ import org.apache.tika.io.TikaInputStream; import org.apache.tika.metadata.Metadata; import org.apache.tika.metadata.TikaCoreProperties; import org.apache.tika.mime.MediaType; +import org.apache.tika.mime.MimeType; import org.apache.tika.mime.MimeTypeException; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser;
