This is an automated email from the ASF dual-hosted git repository. djencks pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 8d48dde56f525b3cec9e7d42741994a43ce8995e Author: David Jencks <djen...@apache.org> AuthorDate: Tue Jan 4 14:45:32 2022 -0800 CAMEL-17433 fix JavadocHelper --- .../apache/camel/tooling/util/JavadocHelper.java | 9 +++--- .../camel/tooling/util/JavadocHelperTest.java | 36 ++++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/JavadocHelper.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/JavadocHelper.java index 9a89dcf..e940559 100644 --- a/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/JavadocHelper.java +++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/JavadocHelper.java @@ -20,7 +20,7 @@ import static org.apache.camel.tooling.util.Strings.isNullOrEmpty; public final class JavadocHelper { - private static final String VALID_CHARS = ".,-='/\\!&%():;#${}"; + private static final String VALID_CHARS = ".,-='/\\!&%():;#${}<>"; private JavadocHelper() { } @@ -87,8 +87,9 @@ public final class JavadocHelper { } String s = sb.toString(); - // remove all XML tags - s = s.replaceAll("<.*?>", ""); + // remove all XML tags. This isn't complete but likely to find anything actually used. + s = s.replaceAll("<(\\w|:|_)(\\w|:|_|-|\\.|\\d)*\\s.*/?>", ""); + s = s.replaceAll("</(\\w|:|_)(\\w|:|_|-|\\.|\\d)*\\s*>", ""); // remove {@link inlined javadoc links which is special handled s = s.replaceAll("\\{@link\\s\\w+\\s(\\w+)}", "$1"); s = s.replaceAll("\\{@link\\s([\\w]+)}", "$1"); @@ -130,7 +131,7 @@ public final class JavadocHelper { return ""; } // must replace amp first, so we dont replace < to amp later - text = text.replace("&", "&"); + text = text.replaceAll("&(?!(amp;)|(lt;)|(gt;)|(quot;))", "&"); text = text.replace("\"", """); text = text.replace("<", "<"); text = text.replace(">", ">"); diff --git a/tooling/camel-tooling-util/src/test/java/org/apache/camel/tooling/util/JavadocHelperTest.java b/tooling/camel-tooling-util/src/test/java/org/apache/camel/tooling/util/JavadocHelperTest.java index 6e1698f..05dbfca 100644 --- a/tooling/camel-tooling-util/src/test/java/org/apache/camel/tooling/util/JavadocHelperTest.java +++ b/tooling/camel-tooling-util/src/test/java/org/apache/camel/tooling/util/JavadocHelperTest.java @@ -99,4 +99,40 @@ public class JavadocHelperTest { Assertions.assertEquals("Provides methods to interact with Transactions. E.g. sales, credits, refunds, searches, etc.", s3); } + + @Test + public void testltgtInJavaDoc() throws Exception { + String s = " * valid for versions < 26.0."; + String s2 = JavadocHelper.sanitizeDescription(s, false); + Assertions.assertEquals(s.substring(3), s2); + String s3 = " * valid for versions >= 26.0."; + String s4 = JavadocHelper.sanitizeDescription(s3, false); + Assertions.assertEquals(s3.substring(3), s4); + } + + @Test + public void testRemoveXmlTagsInJavaDoc() throws Exception { + String s = " * foo <xs:foo a=\"x\" b=\"y\"> bar"; + String s2 = JavadocHelper.sanitizeDescription(s, false); + Assertions.assertEquals("foo bar", s2); + String s3 = " * foo </xs:foo> bar"; + String s4 = JavadocHelper.sanitizeDescription(s3, false); + Assertions.assertEquals("foo bar", s4); + String s5 = " * foo </xs:foo > bar"; + String s6 = JavadocHelper.sanitizeDescription(s5, false); + Assertions.assertEquals("foo bar", s6); + String s7 = " * this < is not an xml > tag"; + String s8 = JavadocHelper.sanitizeDescription(s7, false); + Assertions.assertEquals(s7.substring(3), s8); + } + + @Test + public void testXmlEncode() throws Exception { + String s = "foo & bar > baz < foo " bar"; + String s2 = JavadocHelper.xmlEncode(s); + Assertions.assertEquals(s, s2); + String s3 = "foo & bar > baz < foo \" bar"; + String s4 = JavadocHelper.xmlEncode(s3); + Assertions.assertEquals(s, s4); + } }