wrequest.setQueryString(hrequest.getQueryString());
processRequest(request,response,state);
-
- wrequest.recycle();
- unwrapRequest(state);
-
}
// Handle an HTTP path-based forward
}
processRequest(request,response,state);
-
- wrequest.recycle();
- unwrapRequest(state);
-
}
// This is not a real close in order to support error processing
ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR,
servletPath);
invoke(state.outerRequest, state.outerResponse, state);
-
- wrequest.recycle();
}
// Handle an HTTP path based include
ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR,
servletPath);
invoke(state.outerRequest, state.outerResponse, state);
-
- wrequest.recycle();
}
}
// See Bugzilla 30949
unwrapRequest(state);
unwrapResponse(state);
-
+ // Recycle request if necessary (also BZ 30949)
+ recycleRequestWrapper(state);
+
// Rethrow an exception if one was thrown by the invoked servlet
if (ioException != null)
throw ioException;
"applicationDispatcher.specViolation.response"));
}
}
+
+ private void recycleRequestWrapper(State state) {
+ if (state.wrapRequest instanceof ApplicationHttpRequest) {
+ ((ApplicationHttpRequest) state.wrapRequest).recycle(); }
+ }
}
<subsection name="Catalina">
<changelog>
<fix>
+ <bug>30949</bug>: Improve previous fix. Ensure requests are re-cycled
+ on cross-context includes and forwards when an exception occurs in the
+ target page. (markt)
+ </fix>
+ <fix>
<bug>42944</bug>: Correctly handle servlet mappings that use a '+'
character as part of the url pattern. (markt)
</fix>