diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/AllowListChecker.java b/java/fory-core/src/main/java/org/apache/fory/resolver/AllowListChecker.java index 2429be284a..693cc6f75d 100644 --- a/java/fory-core/src/main/java/org/apache/fory/resolver/AllowListChecker.java +++ b/java/fory-core/src/main/java/org/apache/fory/resolver/AllowListChecker.java @@ -103,8 +103,12 @@ private boolean check(String className) { if (checkLevel == CheckLevel.DISABLE) { return true; } - boolean disallowed = containsPrefix(disallowList, disallowListPrefix, className); - boolean allowed = containsPrefix(allowList, allowListPrefix, className); + boolean disallowed = + containsPrefix(disallowList, disallowListPrefix, className) + || DisallowedList.contains(className); + boolean allowed = + containsPrefix(allowList, allowListPrefix, className) + || DefaultJdkClassAllowList.contains(className); if (className.startsWith("[")) { Tuple2 componentInfo = TypeUtils.getArrayComponentInfo(className); String componentName = componentInfo.f0; diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/DefaultJdkClassAllowList.java b/java/fory-core/src/main/java/org/apache/fory/resolver/DefaultJdkClassAllowList.java index 578e6c87b4..15cf79ab7f 100644 --- a/java/fory-core/src/main/java/org/apache/fory/resolver/DefaultJdkClassAllowList.java +++ b/java/fory-core/src/main/java/org/apache/fory/resolver/DefaultJdkClassAllowList.java @@ -23,7 +23,7 @@ import java.util.Set; /** JDK interface names which can be loaded without explicit class registration. */ -final class DefaultJdkClassAllowList { +public final class DefaultJdkClassAllowList { private static final Set CLASS_NAMES = new HashSet<>(); static { @@ -89,4 +89,13 @@ private DefaultJdkClassAllowList() {} static boolean contains(String className) { return CLASS_NAMES.contains(className) || className.startsWith("java.util.function."); } + + /** + * Get the allowed class names as an immutable set. + * + * @return Set of allowed class names + */ + public static Set getAllowClasses() { + return CLASS_NAMES; + } } diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/DisallowedList.java b/java/fory-core/src/main/java/org/apache/fory/resolver/DisallowedList.java index 88a4e03a1f..32cddb836e 100644 --- a/java/fory-core/src/main/java/org/apache/fory/resolver/DisallowedList.java +++ b/java/fory-core/src/main/java/org/apache/fory/resolver/DisallowedList.java @@ -317,4 +317,8 @@ public static void checkNotInDisallowedList(String clsName) { throw new InsecureException(String.format("%s hit disallowed list", clsName)); } } + + public static boolean contains(String className) { + return DEFAULT_DISALLOWED_LIST_SET.contains(className); + } }