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

rzo1 pushed a commit to branch tomee-10.x
in repository https://gitbox.apache.org/repos/asf/tomee.git

commit 1a4c70bbd281b142e745c6f1311061872c6f6e01
Author: Markus Jung <[email protected]>
AuthorDate: Sun Aug 23 21:23:16 2026 +0200

    improve maven metadata and settings parsing
    
    (cherry picked from commit a454ac25794674aa41c5375ab4bf33f99d6a2b8e)
---
 .../openejb/loader/provisining/MavenResolver.java   | 19 +++++++++++++++++++
 .../loader/provisining/MavenResolverTest.java       | 21 +++++++++++++++++++++
 2 files changed, 40 insertions(+)

diff --git 
a/container/openejb-loader/src/main/java/org/apache/openejb/loader/provisining/MavenResolver.java
 
b/container/openejb-loader/src/main/java/org/apache/openejb/loader/provisining/MavenResolver.java
index 55bddf2367..bc7faae78a 100644
--- 
a/container/openejb-loader/src/main/java/org/apache/openejb/loader/provisining/MavenResolver.java
+++ 
b/container/openejb-loader/src/main/java/org/apache/openejb/loader/provisining/MavenResolver.java
@@ -50,6 +50,18 @@ public class MavenResolver implements ArchiveResolver, 
ProvisioningResolverAware
     static {
         FACTORY.setNamespaceAware(false);
         FACTORY.setValidating(false);
+        trySetFeature("http://apache.org/xml/features/disallow-doctype-decl";, 
true);
+        trySetFeature("http://xml.org/sax/features/external-general-entities";, 
false);
+        
trySetFeature("http://xml.org/sax/features/external-parameter-entities";, false);
+        FACTORY.setXIncludeAware(false);
+    }
+
+    private static void trySetFeature(final String feature, final boolean 
value) {
+        try {
+            FACTORY.setFeature(feature, value);
+        } catch (final Exception e) {
+            // no-op: feature not supported by this parser
+        }
     }
 
     private ProvisioningResolver resolver;
@@ -148,6 +160,13 @@ public class MavenResolver implements ArchiveResolver, 
ProvisioningResolverAware
                 DocumentBuilder builder = BUILDER.get();
                 if (null == builder) {
                     final DocumentBuilderFactory factory = 
DocumentBuilderFactory.newInstance();
+                    try {
+                        
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl";, 
true);
+                    } catch (final Exception e) {
+                        // no-op: feature not supported by this parser
+                    }
+                    factory.setXIncludeAware(false);
+                    factory.setExpandEntityReferences(false);
                     builder = factory.newDocumentBuilder();
                     BUILDER.set(builder);
                 }
diff --git 
a/container/openejb-loader/src/test/java/org/apache/openejb/loader/provisining/MavenResolverTest.java
 
b/container/openejb-loader/src/test/java/org/apache/openejb/loader/provisining/MavenResolverTest.java
index 1fa5d5493c..73328dd36b 100644
--- 
a/container/openejb-loader/src/test/java/org/apache/openejb/loader/provisining/MavenResolverTest.java
+++ 
b/container/openejb-loader/src/test/java/org/apache/openejb/loader/provisining/MavenResolverTest.java
@@ -22,9 +22,11 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.InputStream;
+import java.lang.reflect.Method;
 import java.util.Collections;
 import java.util.jar.JarFile;
 
@@ -75,6 +77,25 @@ public class MavenResolverTest {
         
resolveCommon("mvn:https://repo1.maven.org/maven2/!junit:junit:LATEST:jar";);
     }
 
+    @Test
+    public void doctypeInMetadataKeepsRequestedVersion() throws Exception {
+        final File external = File.createTempFile("metadata", ".txt");
+        external.deleteOnExit();
+        try (final FileOutputStream out = new FileOutputStream(external)) {
+            out.write("1.2.3".getBytes("UTF-8"));
+        }
+
+        final String xml = "<?xml version=\"1.0\"?>\n"
+                + "<!DOCTYPE metadata [<!ENTITY ext SYSTEM \"" + 
external.toURI().toURL() + "\">]>\n"
+                + 
"<metadata><versioning><release>&ext;</release><latest>&ext;</latest></versioning></metadata>";
+        final ByteArrayOutputStream metadata = new ByteArrayOutputStream();
+        metadata.write(xml.getBytes("UTF-8"));
+
+        final Method extract = 
MavenResolver.class.getDeclaredMethod("extractRealVersion", String.class, 
ByteArrayOutputStream.class);
+        extract.setAccessible(true);
+        assertEquals("LATEST", extract.invoke(null, "LATEST", metadata));
+    }
+
     @Test
     public void overrideRepo() throws Exception {
         System.setProperty("openejb.deployer.repository", 
"https://bob.smith/repo/";);

Reply via email to