From a41042c0fb2d2b4d82cb0e9bce906f04be975f89 Mon Sep 17 00:00:00 2001 From: Damian Jankowski Date: Mon, 3 Nov 2025 09:18:01 +0100 Subject: [PATCH] fix regex expression prone to backtracking in JavaClientCodegen --- .../v3/generators/java/JavaClientCodegen.java | 4 +-- .../java/JavaCXFClientCodegenTest.java | 3 +-- .../java/JavaClientCodegenTest.java | 27 ++++++++++++++----- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java b/src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java index fbb1481470..b5b888ca53 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java +++ b/src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java @@ -608,8 +608,8 @@ public void setUseRuntimeException(boolean useRuntimeException) { this.useRuntimeException = useRuntimeException; } - final private static Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)application\\/json(;.*)?"); - final private static Pattern JSON_VENDOR_MIME_PATTERN = Pattern.compile("(?i)application\\/vnd.(.*)+json(;.*)?"); + private static final Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)application/json(;.*)?"); + private static final Pattern JSON_VENDOR_MIME_PATTERN = Pattern.compile("(?i)application/vnd\\..*\\+json(;.*)?"); /** * Check if the given MIME is a JSON MIME. diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java index 31b9f8f61c..0ce56b578a 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaCXFClientCodegenTest.java @@ -15,7 +15,7 @@ public class JavaCXFClientCodegenTest extends AbstractCodegenTest { @Test - public void responseWithoutContent() throws Exception { + public void responseWithoutContent() { final OpenAPI openAPI = getOpenAPI("3_0_0/response_without_content.yaml"); final Operation operation = openAPI.getPaths().get("/pets").getGet(); @@ -42,5 +42,4 @@ public void responseWithoutContent() throws Exception { Assert.assertEquals(cr2.vendorExtensions.get("x-java-is-response-void"), Boolean.TRUE); } - } diff --git a/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java b/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java index 1d18af4310..ab0b9eadd0 100644 --- a/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java +++ b/src/test/java/io/swagger/codegen/v3/generators/java/JavaClientCodegenTest.java @@ -7,14 +7,10 @@ import io.swagger.codegen.v3.CodegenModelType; import io.swagger.codegen.v3.CodegenParameter; import io.swagger.codegen.v3.CodegenProperty; -import io.swagger.codegen.v3.CodegenSchema; import io.swagger.codegen.v3.ISchemaHandler; import io.swagger.codegen.v3.generators.AbstractCodegenTest; import io.swagger.codegen.v3.generators.CodegenWrapper; import io.swagger.codegen.v3.generators.DefaultCodegenConfig; -import io.swagger.codegen.v3.generators.SchemaHandler; -import io.swagger.util.Json; -import io.swagger.util.Yaml; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.ArraySchema; import io.swagger.v3.oas.models.media.ComposedSchema; @@ -25,9 +21,6 @@ import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; import io.swagger.v3.oas.models.parameters.RequestBody; -import io.swagger.v3.parser.OpenAPIV3Parser; -import io.swagger.v3.parser.core.models.ParseOptions; -import io.swagger.v3.parser.core.models.SwaggerParseResult; import io.swagger.v3.parser.util.SchemaTypeUtil; import org.testng.Assert; import org.testng.annotations.Test; @@ -42,6 +35,26 @@ public class JavaClientCodegenTest extends AbstractCodegenTest { + @Test + public void testIsJsonMimeType() { + Assert.assertTrue(JavaClientCodegen.isJsonMimeType("application/json")); + Assert.assertTrue(JavaClientCodegen.isJsonMimeType("application/json; charset=UTF8")); + Assert.assertTrue(JavaClientCodegen.isJsonMimeType("APPLICATION/JSON")); + Assert.assertFalse(JavaClientCodegen.isJsonMimeType("text/plain")); + Assert.assertFalse(JavaClientCodegen.isJsonMimeType(null)); + Assert.assertFalse(JavaClientCodegen.isJsonMimeType("application/vnd.mycompany+json")); + } + + @Test + public void testIsJsonVendorMimeType() { + Assert.assertTrue(JavaClientCodegen.isJsonVendorMimeType("application/vnd.mycompany+json")); + Assert.assertTrue(JavaClientCodegen.isJsonVendorMimeType("application/vnd.mycompany.resourceA.version1+json")); + Assert.assertTrue(JavaClientCodegen.isJsonVendorMimeType("application/vnd.test+json; charset=UTF8")); + Assert.assertFalse(JavaClientCodegen.isJsonVendorMimeType("application/json")); + Assert.assertFalse(JavaClientCodegen.isJsonVendorMimeType("text/plain")); + Assert.assertFalse(JavaClientCodegen.isJsonVendorMimeType(null)); + } + @Test public void modelInheritanceSupportInGson() throws Exception { List allModels = new ArrayList();