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

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


The following commit(s) were added to refs/heads/branch_3x by this push:
     new 9b04d0252 [TIKA-4586] Fix NPE in ConfigBase (#2474)
9b04d0252 is described below

commit 9b04d02524b43d68c01f006d9c630718d7c8ea73
Author: Gus Heck <[email protected]>
AuthorDate: Mon Dec 22 06:35:47 2025 -0500

    [TIKA-4586] Fix NPE in ConfigBase (#2474)
    
    * TIKA-4586 Fix NPE in ConfigBase
    
    * TIKA-4586 Test Demonstrating TIKA-4586
    
    * TIKA-4586 spotless nits
---
 .../main/java/org/apache/tika/config/ConfigBase.java   |  6 ++++--
 .../java/org/apache/tika/config/TikaConfigTest.java    | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/tika-core/src/main/java/org/apache/tika/config/ConfigBase.java 
b/tika-core/src/main/java/org/apache/tika/config/ConfigBase.java
index 405294fae..4afe30ac3 100644
--- a/tika-core/src/main/java/org/apache/tika/config/ConfigBase.java
+++ b/tika-core/src/main/java/org/apache/tika/config/ConfigBase.java
@@ -141,7 +141,8 @@ public abstract class ConfigBase {
                                              Element properties)
             throws TikaConfigException, IOException {
 
-        if (!properties.getLocalName().equals("properties")) {
+        if (!("properties".equals(properties.getNodeName()) ||
+            "properties".equals(properties.getLocalName()))) {
             throw new TikaConfigException("expect properties as root node");
         }
         NodeList children = properties.getChildNodes();
@@ -151,7 +152,8 @@ public abstract class ConfigBase {
             if (child.getNodeType() != 1) {
                 continue;
             }
-            if (compositeElementName.equals(child.getLocalName())) {
+            if (compositeElementName.equals(child.getNodeName()) ||
+                compositeElementName.equals(child.getLocalName())) {
                 List<T> components = loadComposite(child, itemName, itemClass);
                 Constructor constructor = null;
                 try {
diff --git a/tika-core/src/test/java/org/apache/tika/config/TikaConfigTest.java 
b/tika-core/src/test/java/org/apache/tika/config/TikaConfigTest.java
index 97ff3f376..a6ef64236 100644
--- a/tika-core/src/test/java/org/apache/tika/config/TikaConfigTest.java
+++ b/tika-core/src/test/java/org/apache/tika/config/TikaConfigTest.java
@@ -31,8 +31,11 @@ import java.nio.file.Paths;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ThreadPoolExecutor;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.junit.jupiter.api.Test;
+import org.w3c.dom.Document;
 
 import org.apache.tika.ResourceLoggingClassLoader;
 import org.apache.tika.exception.TikaConfigException;
@@ -52,6 +55,7 @@ import org.apache.tika.parser.mock.MockParser;
 import org.apache.tika.parser.multiple.FallbackParser;
 import org.apache.tika.utils.XMLReaderUtils;
 
+
 /**
  * Tests for the Tika Config, which don't require real parsers /
  * detectors / etc.
@@ -468,4 +472,18 @@ public class TikaConfigTest extends AbstractTikaConfigTest 
{
         assertNull(config.getMaximumDepth());
         assertNull(config.getMaximumPackageEntryDepth());
     }
+
+    @Test void testTika4586() throws Exception {
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        InputStream stream = 
TikaConfig.class.getResourceAsStream("TIKA-866-valid.xml");
+        DocumentBuilder db = dbf.newDocumentBuilder();
+        Document parsed = db.parse(stream);
+
+        try {
+            new TikaConfig(parsed); // if TIKA-4586, this throws an exception.
+        } catch (Exception e) {
+            fail("TikaConfig(Document) constructor threw an exception",e);
+        }
+
+    }
 }

Reply via email to