Dianshu Liao created LANG-1771: ---------------------------------- Summary: Incorrect output from ClassUtils.getCanonicalName when input is "[String" in version 3.18.0-SNAPSHOT Key: LANG-1771 URL: https://issues.apache.org/jira/browse/LANG-1771 Project: Commons Lang Issue Type: Bug Components: lang.* Affects Versions: 3.18.0 Environment: MacOS Sequoia Version 15.3.2
JDK 8 Reporter: Dianshu Liao Fix For: 3.18.0 In org.apache.commons.lang3.ClassUtils, the method "private static String getCanonicalName(String className)" produces incorrect output for certain malformed array class name strings. Steps to Reproduce: package org.apache.commons.lang3; import org.apache.commons.lang3.ClassUtils; import org.apache.commons.lang3.StringUtils; import org.junit.Test; import java.lang.reflect.Method; import static org.junit.Assert.assertEquals; public class testClassUtils { @Test(timeout = 4000) public void testGetCanonicalName() { try { // Accessing the private static method using reflection Method method = ClassUtils.class.getDeclaredMethod("getCanonicalName", String.class); method.setAccessible(true); String input2 = "[String"; String expectedOutput2 = "String[]"; String actualOutput2 = (String) method.invoke(null, input2); assertEquals(expectedOutput2, actualOutput2); } catch (Exception e) { e.printStackTrace(); } } } Expected Result: actualOutput2 is "String[]" Actual Results: actualOutput2 is "short[]" Additional Information: This issue seems only occurs with input "[String". Other inputs like: "[I" → returns "int[]" (correct) "Ljava.lang.String;" → returns "java.lang.String" (correct) *Version Affected:* {{3.18.0-SNAPSHOT}} -- This message was sent by Atlassian Jira (v8.20.10#820010)