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;
             }
         }

Reply via email to