diff --git a/internal/test/issues/issue-312/issue.gen.go b/internal/test/issues/issue-312/issue.gen.go index f0285c071f..787a65e8bc 100644 --- a/internal/test/issues/issue-312/issue.gen.go +++ b/internal/test/issues/issue-312/issue.gen.go @@ -488,7 +488,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL } router.GET(baseURL+"/pets/:petId", wrapper.GetPet) - router.POST(baseURL+"/pets:validate", wrapper.ValidatePets) + router.POST(baseURL+"/pets\\:validate", wrapper.ValidatePets) } diff --git a/pkg/codegen/utils.go b/pkg/codegen/utils.go index e82d5e3e3c..85c4a62333 100644 --- a/pkg/codegen/utils.go +++ b/pkg/codegen/utils.go @@ -543,6 +543,7 @@ func SwaggerUriToIrisUri(uri string) string { // {?param} // {?param*} func SwaggerUriToEchoUri(uri string) string { + uri = strings.ReplaceAll(uri, ":", "\\\\:") return pathParamRE.ReplaceAllString(uri, ":$1") } @@ -591,6 +592,7 @@ func SwaggerUriToChiUri(uri string) string { // {?param} // {?param*} func SwaggerUriToGinUri(uri string) string { + uri = strings.ReplaceAll(uri, ":", "\\\\:") return pathParamRE.ReplaceAllString(uri, ":$1") } diff --git a/pkg/codegen/utils_test.go b/pkg/codegen/utils_test.go index 28f9f3f3dd..e4bd8e5587 100644 --- a/pkg/codegen/utils_test.go +++ b/pkg/codegen/utils_test.go @@ -368,6 +368,9 @@ func TestSwaggerUriToEchoUri(t *testing.T) { assert.Equal(t, "/path/:arg/foo", SwaggerUriToEchoUri("/path/{;arg*}/foo")) assert.Equal(t, "/path/:arg/foo", SwaggerUriToEchoUri("/path/{?arg}/foo")) assert.Equal(t, "/path/:arg/foo", SwaggerUriToEchoUri("/path/{?arg*}/foo")) + + // Make sure literal colons are escaped + assert.Equal(t, "/path/:arg\\\\:foo", SwaggerUriToGinUri("/path/{arg}:foo")) } func TestSwaggerUriToGinUri(t *testing.T) { @@ -385,6 +388,9 @@ func TestSwaggerUriToGinUri(t *testing.T) { assert.Equal(t, "/path/:arg/foo", SwaggerUriToGinUri("/path/{;arg*}/foo")) assert.Equal(t, "/path/:arg/foo", SwaggerUriToGinUri("/path/{?arg}/foo")) assert.Equal(t, "/path/:arg/foo", SwaggerUriToGinUri("/path/{?arg*}/foo")) + + // Make sure literal colons are escaped + assert.Equal(t, "/path/:arg\\\\:foo", SwaggerUriToGinUri("/path/{arg}:foo")) } func TestSwaggerUriToGorillaUri(t *testing.T) { // TODO