You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rm...@apache.org on 2023/07/02 17:29:27 UTC
[maven] 01/01: [MNG-7831] Ensure XmlUtils does not fail when xmlpullparser detects an entityref and parser.name is null
This is an automated email from the ASF dual-hosted git repository.
rmannibucau pushed a commit to branch MNG-7831
in repository https://gitbox.apache.org/repos/asf/maven.git
commit 981f64d3cd1a7a61da9f6a223b79f1d9038092ee
Author: Romain Manni-Bucau <rm...@gmail.com>
AuthorDate: Sun Jul 2 19:29:15 2023 +0200
[MNG-7831] Ensure XmlUtils does not fail when xmlpullparser detects an entityref and parser.name is null
---
.../ConsumerPomArtifactTransformerTest.java | 26 ++++++++++++++++++++++
.../test/resources/projects/transform/before2.pom | 11 +++++++++
.../maven/model/transform/pull/XmlUtils.java | 20 ++++++++++++++++-
3 files changed, 56 insertions(+), 1 deletion(-)
diff --git a/maven-core/src/test/java/org/apache/maven/internal/transformation/ConsumerPomArtifactTransformerTest.java b/maven-core/src/test/java/org/apache/maven/internal/transformation/ConsumerPomArtifactTransformerTest.java
index 27c4d15e6..68ab7097c 100644
--- a/maven-core/src/test/java/org/apache/maven/internal/transformation/ConsumerPomArtifactTransformerTest.java
+++ b/maven-core/src/test/java/org/apache/maven/internal/transformation/ConsumerPomArtifactTransformerTest.java
@@ -18,8 +18,11 @@
*/
package org.apache.maven.internal.transformation;
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -33,7 +36,9 @@ import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.xmlunit.assertj.XmlAssert;
+import static java.util.stream.Collectors.joining;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@@ -52,6 +57,27 @@ class ConsumerPomArtifactTransformerTest {
}
}
+ @Test
+ void transform2() throws Exception {
+ Path beforePomFile =
+ Paths.get("src/test/resources/projects/transform/before2.pom").toAbsolutePath();
+ try (BufferedReader result = new BufferedReader(new InputStreamReader(
+ ConsumerPomArtifactTransformer.transform(beforePomFile, new NoTransformerContext()),
+ StandardCharsets.UTF_8))) {
+ assertEquals(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ + "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n"
+ + " <modelVersion>4.0.0</modelVersion>\n"
+ + "\n"
+ + " <groupId>com.apache.maven</groupId>\n"
+ + " <artifactId>transform-me</artifactId>\n"
+ + " <version>1.0.0-SNAPSHOT</version>\n"
+ + " <description>1 > 2</description>\n"
+ + "</project>",
+ result.lines().collect(joining("\n")));
+ }
+ }
+
@Test
void injectTransformedArtifactsWithoutPomShouldNotInjectAnyArtifacts() throws IOException {
MavenProject emptyProject = new MavenProject();
diff --git a/maven-core/src/test/resources/projects/transform/before2.pom b/maven-core/src/test/resources/projects/transform/before2.pom
new file mode 100644
index 000000000..e32b2b6ae
--- /dev/null
+++ b/maven-core/src/test/resources/projects/transform/before2.pom
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>com.apache.maven</groupId>
+ <artifactId>transform-me</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <description>1 > 2</description>
+</project>
diff --git a/maven-model-transform/src/main/java/org/apache/maven/model/transform/pull/XmlUtils.java b/maven-model-transform/src/main/java/org/apache/maven/model/transform/pull/XmlUtils.java
index a2f71aa55..80d2c62b7 100644
--- a/maven-model-transform/src/main/java/org/apache/maven/model/transform/pull/XmlUtils.java
+++ b/maven-model-transform/src/main/java/org/apache/maven/model/transform/pull/XmlUtils.java
@@ -78,7 +78,25 @@ public class XmlUtils {
serializer.cdsect(parser.getText());
break;
case XmlPullParser.ENTITY_REF:
- serializer.entityRef(parser.getName());
+ final String name = parser.getName();
+ if (name != null) {
+ serializer.entityRef(name);
+ } else { // mxparser is pseudo-bugy so handle this case (escaped xml char) in a tag without cdata
+ final String text = parser.getText();
+ switch (text) {
+ case "&":
+ serializer.entityRef("amp");
+ break;
+ case "<":
+ serializer.entityRef("lt");
+ break;
+ case ">":
+ serializer.entityRef("gt");
+ break;
+ default: // here we can loose the original escaping but not a big deal
+ serializer.text(text);
+ }
+ }
break;
case XmlPullParser.IGNORABLE_WHITESPACE:
serializer.ignorableWhitespace(normalize(parser.getText()));