From ac76f6e970fc450ead13ae8a2adeabbe2901cf53 Mon Sep 17 00:00:00 2001 From: Mihaly Nyeste Date: Fri, 20 Oct 2017 22:19:18 +0200 Subject: [PATCH] Fix encryption of string containing curly braces (#774) * Add test to reproduce curly brace problem * Fix stripping prefix if string contains curly brace --- .../server/encryption/EnvironmentPrefixHelper.java | 2 +- .../encryption/EncryptionControllerTests.java | 14 ++++++++++++++ .../encryption/EnvironmentPrefixHelperTests.java | 10 ++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelper.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelper.java index 05a621b5..dca6c40c 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelper.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelper.java @@ -117,7 +117,7 @@ class EnvironmentPrefixHelper { if (value.contains(ESCAPE)) { return value.substring(value.indexOf(ESCAPE) + ESCAPE.length()); } - return value.substring(value.lastIndexOf("}") + 1); + return value.replaceFirst("^(\\{.*?:.*?\\})+", ""); } private String removeEnvironmentPrefix(String input) { diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerTests.java index 2ff4e23c..84a08821 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EncryptionControllerTests.java @@ -135,6 +135,20 @@ public class EncryptionControllerTests { assertThat("Prefix must be stripped prior to encrypt", captor.getValue(), not(containsString("{key:test}"))); } + @Test + public void encryptDecyptTextWithCurlyBrace() { + this.controller = new EncryptionController( + new SingleTextEncryptorLocator(new RsaSecretEncryptor())); + + String plain = "textwith}brace"; + + String cipher = this.controller.encrypt(plain, + MediaType.APPLICATION_FORM_URLENCODED); + String decrypt = this.controller.decrypt(cipher, + MediaType.APPLICATION_FORM_URLENCODED); + assertEquals(plain, decrypt); + } + @Test public void addEnvironment() { TextEncryptorLocator locator = new TextEncryptorLocator() { diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelperTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelperTests.java index c9b810aa..b1b997e9 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelperTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/encryption/EnvironmentPrefixHelperTests.java @@ -81,4 +81,14 @@ public class EnvironmentPrefixHelperTests { assertEquals("mykey", keys.get("key")); } + @Test + public void testTextWithCurlyBracesNoPrefix() { + assertEquals("textwith}brac{es", this.helper.stripPrefix("textwith}brac{es")); + } + + @Test + public void testTextWithCurlyBracesPrefix() { + assertEquals("textwith}brac{es{and}prefix", this.helper + .stripPrefix("{key:foo}{name:bar}textwith}brac{es{and}prefix")); + } }