From aa6957e4ccf181d53569caaa35e8a323850f388e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 14 Jul 2020 14:16:30 +0200 Subject: [PATCH] [jOOQ/jOOQ#10387] XMLGenerator should quote source code from views, check constraints, and default expressions in generated output --- .../org/jooq/util/jaxb/tools/XMLBuilder.java | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/util/jaxb/tools/XMLBuilder.java b/jOOQ/src/main/java/org/jooq/util/jaxb/tools/XMLBuilder.java index e5deb6b65a..252b41cd1a 100644 --- a/jOOQ/src/main/java/org/jooq/util/jaxb/tools/XMLBuilder.java +++ b/jOOQ/src/main/java/org/jooq/util/jaxb/tools/XMLBuilder.java @@ -156,37 +156,42 @@ public final class XMLBuilder { public XMLBuilder append(String elementName, String s) { if (s != null) { openTag(elementName); - builder.append(s); + builder.append(escape(s)); closeTag(elementName).newLine(); } return this; } public XMLBuilder append(String elementName, Pattern p) { - if (p != null) { - openTag(elementName); - builder.append(p.pattern()); - closeTag(elementName).newLine(); - } + if (p != null) + append(elementName, p.pattern()); + return this; } public XMLBuilder append(String elementName, Object o) { - if (o != null) { - openTag(elementName); - builder.append(o); - closeTag(elementName).newLine(); - } + if (o != null) + append(elementName, "" + o); + return this; } - @Override - public String toString() { - return builder.toString(); + private static final Pattern P_XML_SPECIAL_CHARACTERS = Pattern.compile("[<>&]"); + + private static final String escape(String string) { + return P_XML_SPECIAL_CHARACTERS.matcher(string).find() + ? string.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + : string; } public void appendTo(Appendable a) throws IOException { a.append(builder); } + @Override + public String toString() { + return builder.toString(); + } }