From f715bbb2dc7c68ef6c6cf6d1442b516f3fe09a87 Mon Sep 17 00:00:00 2001 From: Zachary Sistrunk Date: Tue, 6 Jan 2026 14:12:54 -0600 Subject: [PATCH 1/3] Fix potentially invalid YAML outputs Fixes invalid YAML caused by the combination of `?resolvePlaceholders=true` and `spring.cloud.config.server.encrypt.enabled = false` Signed-off-by: Zachary Sistrunk --- .../cloud/config/server/environment/EnvironmentController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java index e70ca7484..f44f18e15 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java @@ -228,6 +228,7 @@ public ResponseEntity labelledYaml(@PathVariable String name, @PathVaria if (resolvePlaceholders) { yaml = resolvePlaceholders(prepareEnvironment(environment), yaml); + yaml = yaml.replaceAll(": \\{cipher}([0-9a-f]+)", ": '{cipher}$1'"); } return getSuccess(yaml); From 542a01a10608af21ff4b504ca77ec6ec4a99378e Mon Sep 17 00:00:00 2001 From: Zachary Sistrunk Date: Tue, 6 Jan 2026 14:28:07 -0600 Subject: [PATCH 2/3] YAML fix should handle more than just {cipher} strings The invalid YAML can be caused by any string starting with a {, not just {cipher} Signed-off-by: Zachary Sistrunk --- .../cloud/config/server/environment/EnvironmentController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java index f44f18e15..2e5d55b21 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/EnvironmentController.java @@ -228,7 +228,7 @@ public ResponseEntity labelledYaml(@PathVariable String name, @PathVaria if (resolvePlaceholders) { yaml = resolvePlaceholders(prepareEnvironment(environment), yaml); - yaml = yaml.replaceAll(": \\{cipher}([0-9a-f]+)", ": '{cipher}$1'"); + yaml = yaml.replaceAll(": \\{(.+)", ": '{$1'"); } return getSuccess(yaml); From e5e3d76644fb3a5b89e5faa72877ea76e939eff2 Mon Sep 17 00:00:00 2001 From: Zachary Sistrunk Date: Tue, 6 Jan 2026 23:20:38 -0600 Subject: [PATCH 3/3] Adding regression test Signed-off-by: Zachary Sistrunk --- .../environment/EnvironmentControllerTests.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/EnvironmentControllerTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/EnvironmentControllerTests.java index 3e2c25a8d..e35f34e2b 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/EnvironmentControllerTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/EnvironmentControllerTests.java @@ -195,6 +195,20 @@ public void yamlWithBrackets() throws Exception { assertThat(yaml).isEqualTo("a:\n test: e\n b[hello]: c\n b[world]: d\n b[world]d: f\n"); } + @Test + public void yamlWithBraceInValue() throws Exception { + Map map = new LinkedHashMap(); + map.put("a.src", "{cipher}123456"); + map.put("b.src", "{string"); + map.put("a.dst", "${a.src}"); + map.put("b.dst", "${b.src}"); + this.environment.add(new PropertySource("one", map)); + when(this.repository.findOne("foo", "bar", null, false)).thenReturn(this.environment); + String yaml = this.controller.yaml("foo", "bar", true).getBody(); + assertThat(yaml).isEqualTo( + "a:\n src: '{cipher}123456'\n dst: '{cipher}123456'\nb:\n src: '{string'\n dst: '{string'\n"); + } + @Test public void arrayOverridenInEnvironment() throws Exception { // Add original values first source