From 69d8bfc84134cb997f5d59956ec9e71bb531b936 Mon Sep 17 00:00:00 2001 From: indraneelb1903 Date: Wed, 18 Apr 2018 09:11:56 -0400 Subject: [PATCH] Changes to avoid IndexOutOfBoundsException when only one embedded Credential is present in the url. (#980) * Changes to handle IndexOutOFBoundsException --- .../config/client/ConfigClientProperties.java | 10 +++-- .../client/ConfigClientPropertiesTests.java | 44 +++++++++++++++++++ 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java index 4bf3d3f4..b3c8e592 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java @@ -233,14 +233,16 @@ public class ConfigClientProperties { String bare = UriComponentsBuilder.fromHttpUrl(uri).userInfo(null).build() .toUriString(); result.uri = bare; - // handle the password only case + + // if userInfo does not contain a :, then append a : to it if (!userInfo.contains(":")) { userInfo = userInfo + ":"; } - String[] split = userInfo.split(":"); + + int sepIndex=userInfo.indexOf(":"); // set username and password from uri - result.username = split[0]; - result.password = split[1]; + result.username = userInfo.substring(0, sepIndex); + result.password = userInfo.substring(sepIndex +1); // override password if explicitly set if (explicitCredentials.password != null) { diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigClientPropertiesTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigClientPropertiesTests.java index 8d55e2ef..eda6afae 100644 --- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigClientPropertiesTests.java +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/config/client/ConfigClientPropertiesTests.java @@ -59,7 +59,51 @@ public class ConfigClientPropertiesTests { assertEquals("foo", locator.getUsername()); assertEquals("secret", locator.getPassword()); } + + @Test + public void testIfNoColonPresentInUriCreds() { + locator.setUri("http://foobar@localhost:9999"); + locator.setPassword("secret"); + assertEquals("http://localhost:9999", locator.getRawUri()); + assertEquals("foobar", locator.getUsername()); + assertEquals("secret", locator.getPassword()); + } + @Test + public void testIfColonPresentAtTheEndInUriCreds() { + locator.setUri("http://foobar:@localhost:9999"); + locator.setPassword("secret"); + assertEquals("http://localhost:9999", locator.getRawUri()); + assertEquals("foobar", locator.getUsername()); + assertEquals("secret", locator.getPassword()); + } + + @Test + public void testIfColonPresentAtTheStartInUriCreds() { + locator.setUri("http://:foobar@localhost:9999"); + assertEquals("http://localhost:9999", locator.getRawUri()); + assertEquals("", locator.getUsername()); + assertEquals("foobar", locator.getPassword()); + } + + @Test + public void testIfColonPresentAtTheStartAndEndInUriCreds() { + locator.setUri("http://:foobar:@localhost:9999"); + assertEquals("http://localhost:9999", locator.getRawUri()); + assertEquals("", locator.getUsername()); + assertEquals("foobar:", locator.getPassword()); + } + + + @Test + public void testIfsolonPresentAtTheStartAndEndInUriCreds() { + locator.setUri("http:// @localhost:9999"); + locator.setPassword("secret"); + assertEquals("http://localhost:9999", locator.getRawUri()); + assertEquals(" ", locator.getUsername()); + assertEquals("secret", locator.getPassword()); + } + @Test public void changeNameInOverride() { locator.setName("one");