[ 
https://issues.apache.org/jira/browse/WW-4620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15381757#comment-15381757
 ] 

ASF GitHub Bot commented on WW-4620:
------------------------------------

Github user lukaszlenart commented on a diff in the pull request:

    https://github.com/apache/struts/pull/105#discussion_r71101876
  
    --- Diff: 
core/src/main/java/com/opensymphony/xwork2/ognl/accessor/XWorkListPropertyAccessor.java
 ---
    @@ -45,6 +45,12 @@
         private ObjectFactory objectFactory;
         private ObjectTypeDeterminer objectTypeDeterminer;
         private OgnlUtil ognlUtil;
    +    private int autoGrowCollectionLimit = 255;
    +    
    +    @Inject(value="java.util.Collection.autoGrowCollectionLimit", required 
= false)
    --- End diff --
    
    Hmm... I would add `struts.` prefix, though. The name suggests that it is 
something Java specific.


> ParametersInterceptor should check collection index to against DOS
> ------------------------------------------------------------------
>
>                 Key: WW-4620
>                 URL: https://issues.apache.org/jira/browse/WW-4620
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Core Interceptors
>            Reporter: zhouyanming
>            Priority: Critical
>             Fix For: 2.3.31, 2.5.3
>
>
> https://dzone.com/articles/spring-initbinder-for-handling-large-list-of-java
> This is my workaround:
> {code:java}
> import org.apache.commons.lang3.StringUtils;
> import com.opensymphony.xwork2.interceptor.ParametersInterceptor;
> import com.opensymphony.xwork2.util.logging.Logger;
> import com.opensymphony.xwork2.util.logging.LoggerFactory;
> public class ParamsInterceptor extends ParametersInterceptor {
>       private static final Logger LOG = 
> LoggerFactory.getLogger(ParametersInterceptor.class);
>       protected int autoGrowCollectionLimit = 255;
>       public void setAutoGrowCollectionLimit(int autoGrowCollectionLimit) {
>               this.autoGrowCollectionLimit = autoGrowCollectionLimit;
>       }
>       @Override
>       protected boolean acceptableName(String name) {
>               boolean b = super.acceptableName(name);
>               if (b) {
>                       int start = name.indexOf('[');
>                       while (start > 0) {
>                               int end = name.indexOf(']', start);
>                               if (end < 0)
>                                       break;
>                               String s = name.substring(start + 1, end);
>                               if (StringUtils.isNumeric(s)) {
>                                       int index = Integer.valueOf(s);
>                                       if (index > autoGrowCollectionLimit) {
>                                               LOG.warn("Parameter \"#0\" 
> exceed max index: [#1]", name, autoGrowCollectionLimit);
>                                               return false;
>                                       }
>                               }
>                               start = name.indexOf('[', end);
>                       }
>               }
>               return b;
>       }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to