From 740153b5aa74d960116f28be9c755e3b7debd2a2 Mon Sep 17 00:00:00 2001 From: Mohammed Ammer Date: Mon, 24 Feb 2020 15:20:10 +0100 Subject: [PATCH 1/2] Add check if the file extension is null before calling the to toLowerCase() - Fixes gh-20302 --- .../cloud/config/server/resource/ResourceController.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 d228bf44..467f2d26 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 @@ -145,14 +145,16 @@ public class ResourceController { // ensure InputStream will be closed to prevent file locks on Windows try (InputStream is = resource.getInputStream()) { String text = StreamUtils.copyToString(is, Charset.forName("UTF-8")); - String ext = StringUtils.getFilenameExtension(resource.getFilename()) - .toLowerCase(); + String ext = StringUtils.getFilenameExtension(resource.getFilename()); + if (ext != null) { + ext = ext.toLowerCase(); + } Environment environment = this.environmentRepository.findOne(name, profile, label, false); if (resolvePlaceholders) { text = resolvePlaceholders(prepareEnvironment(environment), text); } - if (encryptEnabled && plainTextEncryptEnabled) { + if (ext != null && encryptEnabled && plainTextEncryptEnabled) { ResourceEncryptor re = this.resourceEncryptorMap.get(ext); if (re == null) { logger.warn("Cannot decrypt for extension " + ext); From 8ce1b45519201dc7573d63febd51dcbc1af3acf4 Mon Sep 17 00:00:00 2001 From: Mohammed Ammer Date: Mon, 24 Feb 2020 19:36:39 +0100 Subject: [PATCH 2/2] Add junit test for retrieving a resource without file extension - Fixes gh-20302 --- .../config/server/resource/ResourceControllerTests.java | 7 +++++++ spring-cloud-config-server/src/test/resources/test/dev/foo | 1 + 2 files changed, 8 insertions(+) create mode 100644 spring-cloud-config-server/src/test/resources/test/dev/foo 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 acd08695..00565416 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 @@ -175,6 +175,13 @@ public class ResourceControllerTests { assertThat(resource).isEqualToIgnoringNewLines("foo: dev_bar/spam"); } + @Test + public void resourceWithoutFileExtension() throws Exception { + this.environmentRepository.setSearchLocations("classpath:/test"); + String resource = this.controller.retrieve("foo", "bar", "dev", "foo", true); + assertThat(resource).isEqualToIgnoringNewLines("foo: dev_bar"); + } + @Test public void resourceWithSlash() throws Exception { this.environmentRepository.setSearchLocations("classpath:/test"); diff --git a/spring-cloud-config-server/src/test/resources/test/dev/foo b/spring-cloud-config-server/src/test/resources/test/dev/foo new file mode 100644 index 00000000..be18679f --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/test/dev/foo @@ -0,0 +1 @@ +foo: dev_bar