From 44ac98707335ea3a4d6b016d4ed513d1a3d8251e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 25 Jul 2014 17:04:44 +0200 Subject: [PATCH] [#3450] Backslashes is SQL comments don't get escaped --- .../src/main/java/org/jooq/util/JavaGenerator.java | 12 ++++++++++-- .../src/main/java/org/jooq/util/JavaWriter.java | 5 ++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index e13b349fae..cf34606199 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -2125,7 +2125,12 @@ public class JavaGenerator extends AbstractGenerator { } private String escapeString(String comment) { - return comment.replace("\"", "\\\"").replace("\n", "\\n").replace("\r", "\\r"); + + // [#3450] Escape also the escape sequence, among other things that break Java strings. + return comment.replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\n", "\\n") + .replace("\r", "\\r"); } /** @@ -2847,7 +2852,10 @@ public class JavaGenerator extends AbstractGenerator { * This method is used to add line breaks in lengthy javadocs */ protected void printJavadocParagraph(JavaWriter out, String comment, String indent) { - printParagraph(out, comment, indent + " * "); + + // [#3450] Must not print */ inside Javadoc + String escaped = comment.replace("*/", "* /"); + printParagraph(out, escaped, indent + " * "); } protected void printParagraph(GeneratorWriter out, String comment, String indent) { diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaWriter.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaWriter.java index e76a086da1..a0f2fdd3eb 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaWriter.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaWriter.java @@ -28,9 +28,12 @@ public class JavaWriter extends GeneratorWriter { public JavaWriter javadoc(String string, Object... args) { final int t = tab(); + // [#3450] Must not print */ inside Javadoc + String escaped = string.replace("*/", "* /"); + tab(t).println(); tab(t).println("/**"); - tab(t).println(" * " + string, args); + tab(t).println(" * " + escaped, args); tab(t).println(" */"); return this;