From a1daaf0c19fb395663081e1882ec6b05c3023fc7 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 10 Oct 2022 17:34:31 +0200 Subject: [PATCH] Revise CGLIB naming policy to only contain SpringCGLIB label once See gh-29295 --- .../cglib/core/SpringNamingPolicy.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/cglib/core/SpringNamingPolicy.java b/spring-core/src/main/java/org/springframework/cglib/core/SpringNamingPolicy.java index 78edb12db60..7063cc86da0 100644 --- a/spring-core/src/main/java/org/springframework/cglib/core/SpringNamingPolicy.java +++ b/spring-core/src/main/java/org/springframework/cglib/core/SpringNamingPolicy.java @@ -31,20 +31,33 @@ public final class SpringNamingPolicy implements NamingPolicy { public static final SpringNamingPolicy INSTANCE = new SpringNamingPolicy(); + private static final String LABEL = "$$SpringCGLIB$$"; + private SpringNamingPolicy() { } public String getClassName(String prefix, String source, Object key, Predicate names) { if (prefix == null) { prefix = "org.springframework.cglib.empty.Object"; - } else if (prefix.startsWith("java")) { + } + else if (prefix.startsWith("java")) { prefix = "_" + prefix; } - String base = prefix + "$$SpringCGLIB$$"; + + String base; + int existingLabel = prefix.indexOf(LABEL); + if (existingLabel >= 0) { + base = prefix.substring(0, existingLabel + LABEL.length()); + } + else { + base = prefix + LABEL; + } + int index = 0; String attempt = base + index; - while (names.evaluate(attempt)) + while (names.evaluate(attempt)) { attempt = base + index++; + } return attempt; }