This is an automated email from the ASF dual-hosted git repository.

kusal pushed a commit to branch WW-5341-classloaders
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 71fa91d8246d87c730b08bf4cba0967c3016b4f7
Author: Kusal Kithul-Godage <g...@kusal.io>
AuthorDate: Tue Aug 29 09:21:30 2023 +1000

    WW-5341 Split package exclusion check
---
 .../xwork2/ognl/SecurityMemberAccess.java          | 28 ++++++----------------
 .../xwork2/ognl/SecurityMemberAccessTest.java      |  6 ++---
 .../com/test/ExternalSecurityMemberAccess.java     |  4 ++--
 3 files changed, 12 insertions(+), 26 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 e75805d71..3e1c69d5d 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
@@ -152,19 +152,16 @@ public class SecurityMemberAccess implements MemberAccess 
{
             LOG.warn("The use of the default (unnamed) package is 
discouraged!");
         }
 
-        if (isPackageExcluded(targetClass, memberClass)) {
-            LOG.warn(
-                    "Package [{}] of target class [{}] of target [{}] or 
package [{}] of member [{}] are excluded!",
+        if (isPackageExcluded(targetClass)) {
+            LOG.warn("Package [{}] of target class [{}] of target [{}] is 
excluded!",
                     targetClass.getPackage(),
                     targetClass,
-                    target,
-                    memberClass.getPackage(),
-                    member);
+                    target);
             return false;
         }
 
-        if (disallowProxyMemberAccess && ProxyUtil.isProxyMember(member, 
target)) {
-            LOG.warn("Access to proxy is blocked! Target class [{}] of target 
[{}], member [{}]", targetClass, target, member);
+        if (isPackageExcluded(memberClass)) {
+            LOG.warn("Package [{}] of member [{}] are excluded!", 
memberClass.getPackage(), member);
             return false;
         }
 
@@ -222,19 +219,8 @@ public class SecurityMemberAccess implements MemberAccess {
         return false;
     }
 
-    protected boolean isPackageExcluded(Class<?> targetClass, Class<?> 
memberClass) {
-        if (targetClass == null || memberClass == null) {
-            throw new IllegalArgumentException(
-                    "Parameters should never be null - if member is static, 
targetClass should be the same as memberClass.");
-        }
-
-        List<Class<?>> classesToCheck = Arrays.asList(targetClass, 
memberClass);
-        for (Class<?> clazz : classesToCheck) {
-            if (!excludedPackageExemptClasses.contains(clazz.getName()) && 
(isExcludedPackageNames(clazz) || isExcludedPackageNamePatterns(clazz))) {
-                return true;
-            }
-        }
-        return false;
+    protected boolean isPackageExcluded(Class<?> clazz) {
+        return !excludedPackageExemptClasses.contains(clazz.getName()) && 
(isExcludedPackageNames(clazz) || isExcludedPackageNamePatterns(clazz));
     }
 
     public static String toPackageName(Class<?> clazz) {
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessTest.java 
b/core/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessTest.java
index b7b1bce09..15a9885c9 100644
--- 
a/core/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessTest.java
+++ 
b/core/src/test/java/com/opensymphony/xwork2/ognl/SecurityMemberAccessTest.java
@@ -309,7 +309,7 @@ public class SecurityMemberAccessTest {
         Class<?> clazz = Class.forName("PackagelessAction");
 
         // when
-        boolean actual = sma.isPackageExcluded(clazz, clazz);
+        boolean actual = sma.isPackageExcluded(clazz);
 
         // then
         assertFalse("default package is excluded!", actual);
@@ -325,7 +325,7 @@ public class SecurityMemberAccessTest {
         Class<?> clazz = Class.forName("PackagelessAction");
 
         // when
-        boolean actual = sma.isPackageExcluded(clazz, clazz);
+        boolean actual = sma.isPackageExcluded(clazz);
 
         // then
         assertTrue("default package isn't excluded!", actual);
@@ -768,7 +768,7 @@ public class SecurityMemberAccessTest {
         
sma.useExcludedPackageNames(TextParseUtil.commaDelimitedStringToSet("java.lang"));
 
         // when
-        boolean actual = sma.isPackageExcluded(String.class, String.class);
+        boolean actual = sma.isPackageExcluded(String.class);
 
         // then
         assertTrue("package java.lang. is accessible!", actual);
diff --git a/core/src/test/java/com/test/ExternalSecurityMemberAccess.java 
b/core/src/test/java/com/test/ExternalSecurityMemberAccess.java
index 41183fa39..a53f1736b 100644
--- a/core/src/test/java/com/test/ExternalSecurityMemberAccess.java
+++ b/core/src/test/java/com/test/ExternalSecurityMemberAccess.java
@@ -27,7 +27,7 @@ class ExternalSecurityMemberAccess extends 
SecurityMemberAccess {
     }
 
     @Override
-    public boolean isPackageExcluded(Class<?> targetClass, Class<?> 
memberClass) {
-        return super.isPackageExcluded(targetClass, memberClass);
+    public boolean isPackageExcluded(Class<?> clazz) {
+        return super.isPackageExcluded(clazz);
     }
 }

Reply via email to