From 0cdf11e467cf7365dfa15edf559b57594a7a9ced Mon Sep 17 00:00:00 2001 From: Jafer Khan Date: Tue, 24 Mar 2020 02:56:58 +0500 Subject: [PATCH] Encode usual XML reserved characters See gh-1073 --- .../buildsystem/maven/MavenBuildWriter.java | 30 ++++++++++++++++++- .../maven/MavenBuildWriterTests.java | 28 +++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java index 7c71d198..85357875 100644 --- a/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java +++ b/initializr-generator/src/main/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriter.java @@ -486,7 +486,7 @@ public class MavenBuildWriter { private void writeSingleElement(IndentingWriter writer, String name, String text) { if (text != null) { writer.print(String.format("<%s>", name)); - writer.print(text); + writer.print(escapeString(text)); writer.println(String.format("", name)); } } @@ -516,4 +516,32 @@ public class MavenBuildWriter { } } + private String escapeString(String inputString) { + StringBuilder stringBuilder = new StringBuilder(); + for (int i = 0; i < inputString.length(); i++) { + char character = inputString.charAt(i); + switch (character) { + case '\'': + stringBuilder.append("'"); + break; + case '\"': + stringBuilder.append("""); + break; + case '<': + stringBuilder.append("<"); + break; + case '>': + stringBuilder.append(">"); + break; + case '&': + stringBuilder.append("&"); + break; + default: + stringBuilder.append(character); + } + } + + return stringBuilder.toString(); + } + } diff --git a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java index fa86d6dc..2429d136 100644 --- a/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java +++ b/initializr-generator/src/test/java/io/spring/initializr/generator/buildsystem/maven/MavenBuildWriterTests.java @@ -817,6 +817,27 @@ class MavenBuildWriterTests { }); } + @Test + void pomWithEscapedCharacters() { + MavenBuild build = new MavenBuild(); + build.settings().coordinates("com.example.demo", "demo").name("") + .description("A \"demo\" project for 'developers' & 'testers'"); + + generatePomString(build, (pomString) -> { + String separator = System.lineSeparator(); + assertThat(pomString).isEqualTo("" + separator + + "" + + separator + " 4.0.0" + separator + + " com.example.demo" + separator + " demo" + + separator + " 0.0.1-SNAPSHOT" + separator + + " <demo project>" + separator + + " A "demo" project for 'developers' & 'testers'" + + separator + separator + "" + separator); + }); + } + private void generatePom(MavenBuild mavenBuild, Consumer consumer) { MavenBuildWriter writer = new MavenBuildWriter(); StringWriter out = new StringWriter(); @@ -824,4 +845,11 @@ class MavenBuildWriterTests { consumer.accept(new NodeAssert(out.toString())); } + private void generatePomString(MavenBuild mavenBuild, Consumer consumer) { + MavenBuildWriter writer = new MavenBuildWriter(); + StringWriter out = new StringWriter(); + writer.writeTo(new IndentingWriter(out), mavenBuild); + consumer.accept(out.toString()); + } + }