Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master ecc62b040 -> ae0efe34c


update Urls.mergePaths() to guard against null parts in input


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/de67694e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/de67694e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/de67694e

Branch: refs/heads/master
Commit: de67694e6b3fab3e74501cd07250e331ae34143d
Parents: 7234b83
Author: michaeldye <[email protected]>
Authored: Wed Jan 28 09:44:29 2015 -0700
Committer: michaeldye <[email protected]>
Committed: Wed Jan 28 09:44:29 2015 -0700

----------------------------------------------------------------------
 .../src/main/java/brooklyn/util/net/Urls.java      | 17 ++++++++++++++---
 .../src/test/java/brooklyn/util/net/UrlsTest.java  |  5 +++++
 2 files changed, 19 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/de67694e/utils/common/src/main/java/brooklyn/util/net/Urls.java
----------------------------------------------------------------------
diff --git a/utils/common/src/main/java/brooklyn/util/net/Urls.java 
b/utils/common/src/main/java/brooklyn/util/net/Urls.java
index 917b58a..37fae0f 100644
--- a/utils/common/src/main/java/brooklyn/util/net/Urls.java
+++ b/utils/common/src/main/java/brooklyn/util/net/Urls.java
@@ -25,6 +25,9 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 
 import javax.annotation.Nullable;
 
@@ -119,10 +122,18 @@ public class Urls {
     }
     
     /** returns the items with exactly one "/" between items (whether or not 
the individual items start or end with /),
-     * except where character before the / is a : (url syntax) in which case 
it will permit multiple (will not remove any) */
+     * except where character before the / is a : (url syntax) in which case 
it will permit multiple (will not remove any).
+     * Throws a NullPointerException if any elements of 'items' is null.
+     *  */
     public static String mergePaths(String ...items) {
+        List<String> parts = Arrays.asList(items);
+
+        if (parts.contains(null)) {
+            throw new NullPointerException(String.format("Unable to reliably 
merge path from parts: %s; input contains null values", parts));
+        }
+
         StringBuilder result = new StringBuilder();
-        for (String item: items) {
+        for (String part: parts) {
             boolean trimThisMerge = result.length()>0 && 
!result.toString().endsWith("://") && !result.toString().endsWith(":///") && 
!result.toString().endsWith(":");
             if (trimThisMerge) {
                 while (result.length()>0 && 
result.charAt(result.length()-1)=='/')
@@ -130,7 +141,7 @@ public class Urls {
                 result.append('/');
             }
             int i = result.length();
-            result.append(item);
+            result.append(part);
             if (trimThisMerge) {
                 while (result.length()>i && result.charAt(i)=='/')
                     result.deleteCharAt(i);

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/de67694e/utils/common/src/test/java/brooklyn/util/net/UrlsTest.java
----------------------------------------------------------------------
diff --git a/utils/common/src/test/java/brooklyn/util/net/UrlsTest.java 
b/utils/common/src/test/java/brooklyn/util/net/UrlsTest.java
index d27c3b1..fc45f93 100644
--- a/utils/common/src/test/java/brooklyn/util/net/UrlsTest.java
+++ b/utils/common/src/test/java/brooklyn/util/net/UrlsTest.java
@@ -42,6 +42,11 @@ public class UrlsTest {
         assertEquals(Urls.mergePaths("/","a","b","/"), "/a/b/");
     }
 
+    @Test(expectedExceptions = NullPointerException.class)
+    public void testMergePathsNPEsOnNulls() {
+        Urls.mergePaths(null, "too");
+    }
+
     @Test
     public void testPathEncode() throws Exception {
         assertEquals(Urls.encode("name_with/%!"), "name_with%2F%25%21");

Reply via email to