From 3b753877241838c52fb0f8925f408239d5345739 Mon Sep 17 00:00:00 2001
From: "akihito.nakano" <sora.akatsuki@gmail.com>
Date: Tue, 26 Jun 2018 07:22:10 +0900
Subject: [PATCH 1/7] Add `appDescriptionWithNewLines`

---
 .../openapitools/codegen/CodegenConfig.java   |  2 ++
 .../openapitools/codegen/DefaultCodegen.java  | 19 +++++++++++++++++++
 .../codegen/DefaultGenerator.java             |  1 +
 .../codegen/DefaultCodegenTest.java           | 15 +++++++++++++++
 4 files changed, 37 insertions(+)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java
index fef5d1f510a..e8bb770fba6 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java
@@ -75,6 +75,8 @@ public interface CodegenConfig {
 
     String escapeText(String text);
 
+    String escapeTextWhileAllowingNewLines(String text);
+
     String escapeUnsafeCharacters(String input);
 
     String escapeReservedWord(String name);
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
index 2a5a3b7f43e..e060d658806 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
@@ -415,6 +415,25 @@ public class DefaultCodegen implements CodegenConfig {
                         .replace("\"", "\\\""));
     }
 
+    public String escapeTextWhileAllowingNewLines(String input) {
+        if (input == null) {
+            return input;
+        }
+
+        // remove \t
+        // replace \ with \\
+        // replace " with \"
+        // outter unescape to retain the original multi-byte characters
+        // finally escalate characters avoiding code injection
+        return escapeUnsafeCharacters(
+                StringEscapeUtils.unescapeJava(
+                        StringEscapeUtils.escapeJava(input)
+                                .replace("\\/", "/"))
+                        .replaceAll("[\\t]", " ")
+                        .replace("\\", "\\\\")
+                        .replace("\"", "\\\""));
+    }
+
     /**
      * override with any special text escaping logic to handle unsafe
      * characters so as to avoid code injection
diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java
index 228d1ac59be..606c5077ccf 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java
@@ -219,6 +219,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
             config.additionalProperties().put("unescapedAppDescription", "No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)");
         } else {
             config.additionalProperties().put("appDescription", config.escapeText(info.getDescription()));
+            config.additionalProperties().put("appDescriptionWithNewLines", config.escapeTextWhileAllowingNewLines(info.getDescription()));
             config.additionalProperties().put("unescapedAppDescription", info.getDescription());
         }
 
diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
index 104f7ce5d5a..b12791c3d73 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
@@ -214,4 +214,19 @@ public class DefaultCodegenTest {
 
         Assert.assertNotNull(type);
     }
+
+    @Test
+    public void testEscapeTextWhileAllowingNewLines() {
+        final DefaultCodegen codegen = new DefaultCodegen();
+
+        // allow new lines
+        Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\n"), "\n");
+        Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\r"), "\r");
+
+        // escape other special characters
+        Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\t"), " ");
+        Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\\"), "\\\\");
+        Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\""), "\\\"");
+        Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\\/"), "/");
+    }
 }
-- 
GitLab


From 2aa3fe03d2973aa91677f72aaa39b341ad625fac Mon Sep 17 00:00:00 2001
From: ackintosh <sora.akatsuki@gmail.com>
Date: Tue, 26 Jun 2018 12:57:25 +0900
Subject: [PATCH 2/7] Add test case for escapeText as well

---
 .../org/openapitools/codegen/DefaultCodegenTest.java | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
index b12791c3d73..c521a584072 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
@@ -215,6 +215,18 @@ public class DefaultCodegenTest {
         Assert.assertNotNull(type);
     }
 
+    @Test
+    public void testEscapeText() {
+        final DefaultCodegen codegen = new DefaultCodegen();
+
+        Assert.assertEquals(codegen.escapeText("\n"), " ");
+        Assert.assertEquals(codegen.escapeText("\r"), " ");
+        Assert.assertEquals(codegen.escapeText("\t"), " ");
+        Assert.assertEquals(codegen.escapeText("\\"), "\\\\");
+        Assert.assertEquals(codegen.escapeText("\""), "\\\"");
+        Assert.assertEquals(codegen.escapeText("\\/"), "/");
+    }
+
     @Test
     public void testEscapeTextWhileAllowingNewLines() {
         final DefaultCodegen codegen = new DefaultCodegen();
-- 
GitLab


From 056461e524bcc61218bc20fd879e38c178d87b87 Mon Sep 17 00:00:00 2001
From: ackintosh <sora.akatsuki@gmail.com>
Date: Tue, 26 Jun 2018 13:34:08 +0900
Subject: [PATCH 3/7] Ruby client allows new lines in README

---
 .../src/main/resources/ruby/README.mustache                 | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/modules/openapi-generator/src/main/resources/ruby/README.mustache b/modules/openapi-generator/src/main/resources/ruby/README.mustache
index 42e0f170ccf..8703af147ad 100644
--- a/modules/openapi-generator/src/main/resources/ruby/README.mustache
+++ b/modules/openapi-generator/src/main/resources/ruby/README.mustache
@@ -2,9 +2,9 @@
 
 {{moduleName}} - the Ruby gem for the {{appName}}
 
-{{#appDescription}}
-{{{appDescription}}}
-{{/appDescription}}
+{{#appDescriptionWithNewLines}}
+{{{appDescriptionWithNewLines}}}
+{{/appDescriptionWithNewLines}}
 
 This SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
 
-- 
GitLab


From d8020ab143fa1c9517ffb137100435936ac8ab10 Mon Sep 17 00:00:00 2001
From: ackintosh <sora.akatsuki@gmail.com>
Date: Tue, 26 Jun 2018 13:52:52 +0900
Subject: [PATCH 4/7] Add doc comment

---
 .../main/java/org/openapitools/codegen/DefaultCodegen.java  | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
index e060d658806..ad8fa17e653 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java
@@ -415,6 +415,12 @@ public class DefaultCodegen implements CodegenConfig {
                         .replace("\"", "\\\""));
     }
 
+    /**
+     * Escape characters while allowing new lines
+     *
+     * @param input String to be escaped
+     * @return escaped string
+     */
     public String escapeTextWhileAllowingNewLines(String input) {
         if (input == null) {
             return input;
-- 
GitLab


From a49c898516c0b78f36f18678d4b39fea9b3c2748 Mon Sep 17 00:00:00 2001
From: William Cheng <wing328hk@gmail.com>
Date: Sun, 1 Jul 2018 17:41:00 +0800
Subject: [PATCH 5/7] fix issue related to github web gui

---
 .../test/java/org/openapitools/codegen/DefaultCodegenTest.java   | 1 +
 1 file changed, 1 insertion(+)

diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
index 38960dd755a..7c866dab664 100644
--- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
+++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java
@@ -260,6 +260,7 @@ public class DefaultCodegenTest {
         Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\\"), "\\\\");
         Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\""), "\\\"");
         Assert.assertEquals(codegen.escapeTextWhileAllowingNewLines("\\/"), "/");
+    }
 
     @Test
     public void updateCodegenPropertyEnum() {
-- 
GitLab


From 14b2c10be780ba888cbbcf1dc53acbd38de97ca1 Mon Sep 17 00:00:00 2001
From: "akihito.nakano" <sora.akatsuki@gmail.com>
Date: Sun, 1 Jul 2018 19:35:20 +0900
Subject: [PATCH 6/7] the case of no description provided

---
 .../src/main/java/org/openapitools/codegen/DefaultGenerator.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java
index 606c5077ccf..4d9c9bcc385 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java
@@ -216,6 +216,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator {
             // set a default description if none if provided
             config.additionalProperties().put("appDescription",
                     "No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)");
+            config.additionalProperties().put("appDescriptionWithNewLines", config.additionalProperties().get("appDescription"));
             config.additionalProperties().put("unescapedAppDescription", "No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)");
         } else {
             config.additionalProperties().put("appDescription", config.escapeText(info.getDescription()));
-- 
GitLab


From 5ae80e5edec346d407760fb35eba0d68f51ba0ef Mon Sep 17 00:00:00 2001
From: "akihito.nakano" <sora.akatsuki@gmail.com>
Date: Sun, 1 Jul 2018 20:21:16 +0900
Subject: [PATCH 7/7] Run `./bin/utils/ensure-up-to-date`

https://app.shippable.com/github/OpenAPITools/openapi-generator/runs/1118/1/console
---
 .../src/gen/java/org/openapitools/api/PetApi.java               | 2 +-
 .../src/gen/java/org/openapitools/api/PetApi.java               | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/api/PetApi.java b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/api/PetApi.java
index 9ad52e5c774..c538b127fc4 100644
--- a/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/jaxrs/jersey1-useTags/src/gen/java/org/openapitools/api/PetApi.java
@@ -190,7 +190,7 @@ public class PetApi  {
         return delegate.uploadFile(petId,additionalMetadata,inputStream, fileDetail,securityContext);
     }
     @POST
-    
+    @Path("/{petId}/uploadImageWithRequiredFile")
     @Consumes({ "multipart/form-data" })
     @Produces({ "application/json" })
     @io.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = ModelApiResponse.class, authorizations = {
diff --git a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/api/PetApi.java b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/api/PetApi.java
index 3a8d6f1c2c1..8172cd1ea2f 100644
--- a/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/api/PetApi.java
+++ b/samples/server/petstore/jaxrs/jersey2-useTags/src/gen/java/org/openapitools/api/PetApi.java
@@ -209,7 +209,7 @@ public class PetApi  {
         return delegate.uploadFile(petId,additionalMetadata,fileInputStream, fileDetail,securityContext);
     }
     @POST
-    
+    @Path("/{petId}/uploadImageWithRequiredFile")
     @Consumes({ "multipart/form-data" })
     @Produces({ "application/json" })
     @io.swagger.annotations.ApiOperation(value = "uploads an image", notes = "", response = ModelApiResponse.class, authorizations = {
-- 
GitLab