This is an automated email from the ASF dual-hosted git repository. kusal pushed a commit to branch WW-5337-exclusion-performance in repository https://gitbox.apache.org/repos/asf/struts.git
commit 746c7541326ba809f16bceef8fea4215793b5d62 Author: Kusal Kithul-Godage <g...@kusal.io> AuthorDate: Mon Aug 21 23:37:32 2023 +1000 WW-5337 Make #isExcludedPackageNames runtime proportional to no. of package parts rather than no. of excluded packages --- .../com/opensymphony/xwork2/ognl/SecurityMemberAccess.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java index 3b870dedd..29d15ebf9 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java @@ -27,8 +27,10 @@ import java.lang.reflect.AccessibleObject; import java.lang.reflect.Field; import java.lang.reflect.Member; import java.lang.reflect.Modifier; +import java.util.Arrays; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.regex.Matcher; @@ -241,9 +243,11 @@ public class SecurityMemberAccess implements MemberAccess { } protected boolean isExcludedPackageNames(Class<?> clazz) { - String suffixedPackageName = toPackageName(clazz) + "."; - for (String excludedPackageName : excludedPackageNames) { - if (suffixedPackageName.startsWith(excludedPackageName)) { + String packageName = toPackageName(clazz); + List<String> packageParts = Arrays.asList(packageName.split("\\.")); + for (int i = 0; i < packageParts.size(); i++) { + String parentPackage = String.join(".", packageParts.subList(0, i + 1)); + if (excludedPackageNames.contains(parentPackage)) { return true; } }