From eb97893b4c425fc022bca1d4b3f0d4e92f0e1193 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Thu, 12 Nov 2015 16:51:11 +0000 Subject: [PATCH] Check for escaped labels in binary file paths as well See gh-264 --- .../cloud/config/server/resource/ResourceController.java | 5 +++++ .../config/server/resource/ResourceControllerTests.java | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java index e458b6c9..43f5e34b 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/resource/ResourceController.java @@ -87,6 +87,11 @@ public class ResourceController { @PathVariable String profile, @PathVariable String label, @PathVariable String path) throws IOException { StandardEnvironment environment = new StandardEnvironment(); + if (label != null && label.contains("(_)")) { + // "(_)" is uncommon in a git branch name, but "/" cannot be matched + // by Spring MVC + label = label.replace("(_)", "/"); + } environment.getPropertySources().addAfter( StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME, new EnvironmentPropertySource( diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java index aefd4a9e..d515ac0e 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/resource/ResourceControllerTests.java @@ -85,4 +85,11 @@ public class ResourceControllerTests { assertEquals("foo: dev_bar/spam", resource); } + @Test + public void labelWithSlashForBinary() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test"); + byte[] resource = this.controller.binary("foo", "bar", "dev(_)spam", "foo.txt"); + assertEquals("foo: dev_bar/spam", new String(resource)); + } + }