diff --git a/spectator-ext-ipc/src/main/java/com/netflix/spectator/ipc/http/PathSanitizer.java b/spectator-ext-ipc/src/main/java/com/netflix/spectator/ipc/http/PathSanitizer.java index 50cdac5c1..f1e839829 100644 --- a/spectator-ext-ipc/src/main/java/com/netflix/spectator/ipc/http/PathSanitizer.java +++ b/spectator-ext-ipc/src/main/java/com/netflix/spectator/ipc/http/PathSanitizer.java @@ -40,7 +40,7 @@ private PathSanitizer() { /** Returns a sanitized path string for use as an endpoint tag value. */ public static String sanitize(String path) { - return sanitizeSegments(removeParameters(path), Collections.emptySet()); + return sanitize(path, Collections.emptySet()); } /** @@ -55,7 +55,8 @@ public static String sanitize(String path) { * Sanitized path that can be used as an endpoint tag value. */ public static String sanitize(String path, Set allowed) { - return sanitizeSegments(removeParameters(path), allowed); + String tmp = sanitizeSegments(removeParameters(path), allowed); + return tmp.isEmpty() ? "none" : tmp; } private static String removeParameters(String path) { @@ -64,13 +65,13 @@ private static String removeParameters(String path) { private static String removeParameters(String path, char c) { int i = path.indexOf(c); - return i > 0 ? path.substring(0, i) : path; + return i >= 0 ? path.substring(0, i) : path; } private static String sanitizeSegments(String path, Set allowed) { StringBuilder builder = new StringBuilder(); int length = path.length(); - int pos = path.charAt(0) == '/' ? 1 : 0; + int pos = path.isEmpty() || path.charAt(0) != '/' ? 0 : 1; int segmentsAdded = 0; while (pos < length && segmentsAdded < 5) { diff --git a/spectator-ext-ipc/src/test/java/com/netflix/spectator/ipc/http/PathSanitizerTest.java b/spectator-ext-ipc/src/test/java/com/netflix/spectator/ipc/http/PathSanitizerTest.java index faf704262..92d0893f3 100644 --- a/spectator-ext-ipc/src/test/java/com/netflix/spectator/ipc/http/PathSanitizerTest.java +++ b/spectator-ext-ipc/src/test/java/com/netflix/spectator/ipc/http/PathSanitizerTest.java @@ -37,6 +37,14 @@ private String sanitize(String path) { return PathSanitizer.sanitize(path); } + @Test + public void emptyPath() { + Assertions.assertEquals("none", sanitize("/")); + Assertions.assertEquals("none", sanitize("")); + Assertions.assertEquals("none", sanitize("/?a=1")); + Assertions.assertEquals("none", sanitize("?a=1")); + } + @Test public void uuids() { String path = "/api/v1/foo/" + UUID.randomUUID();