[struts] branch WW-5285-max-files updated: WW-5285 Uses Long and null to check if option has been defined

2023-02-27 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5285-max-files
in repository https://gitbox.apache.org/repos/asf/struts.git


The following commit(s) were added to refs/heads/WW-5285-max-files by this push:
 new 253cd9f53 WW-5285 Uses Long and null to check if option has been 
defined
253cd9f53 is described below

commit 253cd9f5301c8a4920ccca28e8f8c318b3102352
Author: Lukasz Lenart 
AuthorDate: Tue Feb 28 07:26:05 2023 +0100

WW-5285 Uses Long and null to check if option has been defined
---
 .../multipart/AbstractMultiPartRequest.java| 12 +++
 .../multipart/JakartaMultiPartRequest.java |  8 +++--
 .../multipart/JakartaStreamMultiPartRequest.java   | 37 +++---
 .../dispatcher/multipart/PellMultiPartRequest.java |  4 +--
 4 files changed, 31 insertions(+), 30 deletions(-)

diff --git 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
index b3410e578..e46cecc00 100644
--- 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
+++ 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
@@ -51,14 +51,12 @@ public abstract class AbstractMultiPartRequest implements 
MultiPartRequest {
 /**
  * Specifies the maximum size of the entire request.
  */
-protected long maxSize;
-protected boolean maxSizeProvided;
+protected Long maxSize;
 
 /**
  * Specifies the maximum number of files in one request.
  */
-protected long maxFiles;
-protected boolean maxFilesProvided;
+protected Long maxFiles;
 
 /**
  * Specifies the buffer size to use during streaming.
@@ -90,13 +88,11 @@ public abstract class AbstractMultiPartRequest implements 
MultiPartRequest {
  */
 @Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE)
 public void setMaxSize(String maxSize) {
-this.maxSizeProvided = true;
 this.maxSize = Long.parseLong(maxSize);
 }
 
 @Inject(StrutsConstants.STRUTS_MULTIPART_MAXFILES)
 public void setMaxFiles(String maxFiles) {
-this.maxFilesProvided = true;
 this.maxFiles = Long.parseLong(maxFiles);
 }
 
@@ -146,9 +142,9 @@ public abstract class AbstractMultiPartRequest implements 
MultiPartRequest {
 int forwardSlash = fileName.lastIndexOf('/');
 int backwardSlash = fileName.lastIndexOf('\\');
 if (forwardSlash != -1 && forwardSlash > backwardSlash) {
-fileName = fileName.substring(forwardSlash + 1, fileName.length());
+fileName = fileName.substring(forwardSlash + 1);
 } else {
-fileName = fileName.substring(backwardSlash + 1, 
fileName.length());
+fileName = fileName.substring(backwardSlash + 1);
 }
 return fileName;
 }
diff --git 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
index c20b1de19..00d922401 100644
--- 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
+++ 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
@@ -160,8 +160,12 @@ public class JakartaMultiPartRequest extends 
AbstractMultiPartRequest {
 
 protected ServletFileUpload createServletFileUpload(DiskFileItemFactory 
fac) {
 ServletFileUpload upload = new ServletFileUpload(fac);
-upload.setSizeMax(maxSize);
-upload.setFileCountMax(maxFiles);
+if (maxSize != null) {
+upload.setSizeMax(maxSize);
+}
+if (maxFiles != null) {
+upload.setFileCountMax(maxFiles);
+}
 return upload;
 }
 
diff --git 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
index f709b3416..c7311ab0a 100644
--- 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
+++ 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
@@ -30,15 +30,15 @@ import org.apache.struts2.dispatcher.LocalizedMessage;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
+import java.nio.file.Files;
 import java.util.*;
 
 /**
  * Multi-part form data request adapter for Jakarta Commons FileUpload package 
that
  * leverages the streaming API rather than the traditional non-streaming API.
- *
+ * 
  * For more details see WW-3025
  *
- * @author Chris Cranford
  * @since 2.3.18
  */
 public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
@@ -85,7 +85,7 @@ public class JakartaStreamMultiPartRequest extends 
AbstractMultiPartReques

[struts] 01/01: WW-5285 Uses Long and null to check if option has been defined

2023-02-27 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5285-max-files
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 13c93aaa75bea84ee8f597af02975bbcc655cd03
Author: Lukasz Lenart 
AuthorDate: Tue Feb 28 07:26:05 2023 +0100

WW-5285 Uses Long and null to check if option has been defined
---
 .../multipart/AbstractMultiPartRequest.java| 12 +++
 .../multipart/JakartaMultiPartRequest.java |  8 +++--
 .../multipart/JakartaStreamMultiPartRequest.java   | 37 +++---
 .../dispatcher/multipart/PellMultiPartRequest.java |  6 ++--
 4 files changed, 32 insertions(+), 31 deletions(-)

diff --git 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
index b3410e578..e46cecc00 100644
--- 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
+++ 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
@@ -51,14 +51,12 @@ public abstract class AbstractMultiPartRequest implements 
MultiPartRequest {
 /**
  * Specifies the maximum size of the entire request.
  */
-protected long maxSize;
-protected boolean maxSizeProvided;
+protected Long maxSize;
 
 /**
  * Specifies the maximum number of files in one request.
  */
-protected long maxFiles;
-protected boolean maxFilesProvided;
+protected Long maxFiles;
 
 /**
  * Specifies the buffer size to use during streaming.
@@ -90,13 +88,11 @@ public abstract class AbstractMultiPartRequest implements 
MultiPartRequest {
  */
 @Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE)
 public void setMaxSize(String maxSize) {
-this.maxSizeProvided = true;
 this.maxSize = Long.parseLong(maxSize);
 }
 
 @Inject(StrutsConstants.STRUTS_MULTIPART_MAXFILES)
 public void setMaxFiles(String maxFiles) {
-this.maxFilesProvided = true;
 this.maxFiles = Long.parseLong(maxFiles);
 }
 
@@ -146,9 +142,9 @@ public abstract class AbstractMultiPartRequest implements 
MultiPartRequest {
 int forwardSlash = fileName.lastIndexOf('/');
 int backwardSlash = fileName.lastIndexOf('\\');
 if (forwardSlash != -1 && forwardSlash > backwardSlash) {
-fileName = fileName.substring(forwardSlash + 1, fileName.length());
+fileName = fileName.substring(forwardSlash + 1);
 } else {
-fileName = fileName.substring(backwardSlash + 1, 
fileName.length());
+fileName = fileName.substring(backwardSlash + 1);
 }
 return fileName;
 }
diff --git 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
index c20b1de19..00d922401 100644
--- 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
+++ 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequest.java
@@ -160,8 +160,12 @@ public class JakartaMultiPartRequest extends 
AbstractMultiPartRequest {
 
 protected ServletFileUpload createServletFileUpload(DiskFileItemFactory 
fac) {
 ServletFileUpload upload = new ServletFileUpload(fac);
-upload.setSizeMax(maxSize);
-upload.setFileCountMax(maxFiles);
+if (maxSize != null) {
+upload.setSizeMax(maxSize);
+}
+if (maxFiles != null) {
+upload.setFileCountMax(maxFiles);
+}
 return upload;
 }
 
diff --git 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
index f709b3416..c7311ab0a 100644
--- 
a/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
+++ 
b/core/src/main/java/org/apache/struts2/dispatcher/multipart/JakartaStreamMultiPartRequest.java
@@ -30,15 +30,15 @@ import org.apache.struts2.dispatcher.LocalizedMessage;
 
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
+import java.nio.file.Files;
 import java.util.*;
 
 /**
  * Multi-part form data request adapter for Jakarta Commons FileUpload package 
that
  * leverages the streaming API rather than the traditional non-streaming API.
- *
+ * 
  * For more details see WW-3025
  *
- * @author Chris Cranford
  * @since 2.3.18
  */
 public class JakartaStreamMultiPartRequest extends AbstractMultiPartRequest {
@@ -85,7 +85,7 @@ public class JakartaStreamMultiPartRequest extends 
AbstractMultiPartRequest {
 types.add(fileInfo.getContentType());
 }
 
-return types.toArray(new String[types.size()]);
+return types.toArray(new String[0]);
 }
 
 /* (non-J

[struts] branch WW-5285-max-files updated (253cd9f53 -> 13c93aaa7)

2023-02-27 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a change to branch WW-5285-max-files
in repository https://gitbox.apache.org/repos/asf/struts.git


 discard 253cd9f53 WW-5285 Uses Long and null to check if option has been 
defined
 new 13c93aaa7 WW-5285 Uses Long and null to check if option has been 
defined

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (253cd9f53)
\
 N -- N -- N   refs/heads/WW-5285-max-files (13c93aaa7)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/struts2/dispatcher/multipart/PellMultiPartRequest.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)



[struts] branch master updated: WW-5268 Implement ability to specify exempt classes for package exclusions

2023-02-27 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts.git


The following commit(s) were added to refs/heads/master by this push:
 new 5fcee890d WW-5268 Implement ability to specify exempt classes for 
package exclusions
 new 6a27f460c Merge pull request #660 from 
atlassian/WW-5268-excluded-package-exemptions
5fcee890d is described below

commit 5fcee890d593d6eb5034e836bb3cf9e565d7061d
Author: Kusal Kithul-Godage 
AuthorDate: Wed Feb 15 00:34:42 2023 +1100

WW-5268 Implement ability to specify exempt classes for package exclusions
---
 .../com/opensymphony/xwork2/ognl/OgnlUtil.java |  49 --
 .../opensymphony/xwork2/ognl/OgnlValueStack.java   |   8 +-
 .../xwork2/ognl/SecurityMemberAccess.java  |  30 --
 .../java/org/apache/struts2/StrutsConstants.java   |   3 +
 .../xwork2/ognl/SecurityMemberAccessTest.java  | 107 +++--
 5 files changed, 174 insertions(+), 23 deletions(-)

diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java 
b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
index c5430491b..827cda11a 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
@@ -26,7 +26,13 @@ import 
com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor;
 import com.opensymphony.xwork2.util.CompoundRoot;
 import com.opensymphony.xwork2.util.TextParseUtil;
 import com.opensymphony.xwork2.util.reflection.ReflectionException;
-import ognl.*;
+import ognl.ClassResolver;
+import ognl.Ognl;
+import ognl.OgnlContext;
+import ognl.OgnlException;
+import ognl.OgnlRuntime;
+import ognl.SimpleNode;
+import ognl.TypeConverter;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -37,7 +43,12 @@ import java.beans.IntrospectionException;
 import java.beans.Introspector;
 import java.beans.PropertyDescriptor;
 import java.lang.reflect.Method;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.regex.Pattern;
 
@@ -66,10 +77,12 @@ public class OgnlUtil {
 private Set> excludedClasses;
 private Set excludedPackageNamePatterns;
 private Set excludedPackageNames;
+private Set> excludedPackageExemptClasses;
 
 private Set> devModeExcludedClasses;
 private Set devModeExcludedPackageNamePatterns;
 private Set devModeExcludedPackageNames;
+private Set> devModeExcludedPackageExemptClasses;
 
 private Container container;
 private boolean allowStaticFieldAccess = true;
@@ -112,10 +125,12 @@ public class OgnlUtil {
 excludedClasses = Collections.unmodifiableSet(new HashSet<>());
 excludedPackageNamePatterns = Collections.unmodifiableSet(new 
HashSet<>());
 excludedPackageNames = Collections.unmodifiableSet(new HashSet<>());
+excludedPackageExemptClasses = Collections.unmodifiableSet(new 
HashSet<>());
 
 devModeExcludedClasses = Collections.unmodifiableSet(new HashSet<>());
 devModeExcludedPackageNamePatterns = Collections.unmodifiableSet(new 
HashSet<>());
 devModeExcludedPackageNames = Collections.unmodifiableSet(new 
HashSet<>());
+devModeExcludedPackageExemptClasses = Collections.unmodifiableSet(new 
HashSet<>());
 
 this.expressionCache = ognlExpressionCacheFactory.buildOgnlCache();
 this.beanInfoCache = ognlBeanInfoCacheFactory.buildOgnlCache();
@@ -159,7 +174,7 @@ public class OgnlUtil {
 protected void setExcludedClasses(String commaDelimitedClasses) {
 Set> excludedClasses = new HashSet<>();
 excludedClasses.addAll(this.excludedClasses);
-excludedClasses.addAll(parseExcludedClasses(commaDelimitedClasses));
+excludedClasses.addAll(parseClasses(commaDelimitedClasses));
 this.excludedClasses = Collections.unmodifiableSet(excludedClasses);
 }
 
@@ -167,11 +182,11 @@ public class OgnlUtil {
 protected void setDevModeExcludedClasses(String commaDelimitedClasses) {
 Set> excludedClasses = new HashSet<>();
 excludedClasses.addAll(this.devModeExcludedClasses);
-excludedClasses.addAll(parseExcludedClasses(commaDelimitedClasses));
+excludedClasses.addAll(parseClasses(commaDelimitedClasses));
 this.devModeExcludedClasses = 
Collections.unmodifiableSet(excludedClasses);
 }
 
-private Set> parseExcludedClasses(String commaDelimitedClasses) {
+private Set> parseClasses(String commaDelimitedClasses) {
 Set classNames = 
TextParseUtil.commaDelimitedStringToSet(commaDelimitedClasses);
 Set> classes = new HashSet<>();
 
@@ -179,7 +194,7 @@ public cla