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;

Reply via email to