diff --git a/src/main/java/org/apache/commons/lang3/ClassUtils.java b/src/main/java/org/apache/commons/lang3/ClassUtils.java index 5270bee276e..db4d4510b5a 100644 --- a/src/main/java/org/apache/commons/lang3/ClassUtils.java +++ b/src/main/java/org/apache/commons/lang3/ClassUtils.java @@ -496,8 +496,8 @@ private static String getCanonicalName(final String name) { className = className.substring(dim); if (className.startsWith("L")) { className = className.substring(1, className.endsWith(";") ? className.length() - 1 : className.length()); - } else if (!className.isEmpty()) { - className = reverseAbbreviationMap.get(className.substring(0, 1)); + } else if (className.length() == 1 && reverseAbbreviationMap.containsKey(className)) { + className = reverseAbbreviationMap.get(className); } final StringBuilder canonicalClassNameBuffer = new StringBuilder(className.length() + dim * 2); canonicalClassNameBuffer.append(className); diff --git a/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java b/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java index b2173beb779..71cde379ebc 100644 --- a/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/ClassUtilsTest.java @@ -237,6 +237,15 @@ public void test_getAllSuperclasses_Class() { assertNull(ClassUtils.getAllSuperclasses(null)); } + @Test + public void test_getShortCanonicalName_MalformedInput() { + assertEquals("String[]", ClassUtils.getShortCanonicalName("[String")); + } + @Test + public void test_getShortCanonicalName_MissingSemicolon() { + assertEquals("String[]", ClassUtils.getShortCanonicalName("[LString")); + } + @Test public void test_getCanonicalName_Class() { assertEquals("org.apache.commons.lang3.ClassUtils", ClassUtils.getCanonicalName(ClassUtils.class));