Author: musachy Date: Wed Aug 12 17:33:44 2009 New Revision: 803625 URL: http://svn.apache.org/viewvc?rev=803625&view=rev Log: WW-3077 StrutsPrepareAndExecuteFilter: infinite loop in filter chain with dispatcher FORWARD
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java?rev=803625&r1=803624&r2=803625&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/ng/filter/StrutsExecuteFilter.java Wed Aug 12 17:33:44 2009 @@ -74,7 +74,12 @@ } ActionMapping mapping = prepare.findActionMapping(request, response); - if (mapping == null) { + + //if recusrion counter is > 1, it means we are in a "forward", in that case a mapping will still be + //in the request, if we handle it, it will lead to an infinte loop, see WW-3077 + Integer recursionCounter = (Integer) request.getAttribute(PrepareOperations.CLEANUP_RECURSION_COUNTER); + + if (mapping == null || recursionCounter > 1) { boolean handled = execute.executeStaticResourceRequest(request, response); if (!handled) { chain.doFilter(request, response);