[ 
https://issues.apache.org/jira/browse/WICKET-3498?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Martin Grigorov resolved WICKET-3498.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.4.17

Improved in 1.4.x with r1077860.

It appeared that Wicket 1.5.x handles better this by postponing the read to 
headers/parameters after WebRequest's constructor. So it is not related to 
Jetty version.

> Entering huge strings in TextFields causes IllegalStateExceptions not caught 
> by the Framework
> ---------------------------------------------------------------------------------------------
>
>                 Key: WICKET-3498
>                 URL: https://issues.apache.org/jira/browse/WICKET-3498
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-core
>    Affects Versions: 1.4.15, 1.4.16, 1.4.17
>         Environment: Wicket 1.4.x/Spring/Jetty 6
>            Reporter: Georg Hartner
>            Assignee: Martin Grigorov
>              Labels: IllegalStateException,, Jetty, ServletWebRequest
>             Fix For: 1.4.17
>
>   Original Estimate: 5h
>  Remaining Estimate: 5h
>
> We were testing a signin mechanism and entered a huge amount of chars in 
> "username" and "password" fields contained by a form. (more than 200.000 
> chars) This results in an IllegalStateException thrown by Jetty, which is ok 
> from my point of view. The problem is that the full exception stack trace 
> (!!!) is shown to the client => the resulting execution leaves the scope of 
> Wicket framework, which can't handle the exception correctly. Error Page and 
> Stack Trace for Jetty 6 and Wicket 1.4.15:
> HTTP ERROR 500
> Problem accessing 
> /login/wicket:interface/:0:loginPanel:signInForm::IFormSubmitListener::. 
> Reason:
>     Form too large3791446>200000
> Caused by:
> java.lang.IllegalStateException: Form too large3791446>200000
>       at org.mortbay.jetty.Request.extractParameters(Request.java:1561)
>       at org.mortbay.jetty.Request.getParameter(Request.java:859)
>       at 
> org.apache.wicket.protocol.http.servlet.ServletWebRequest.<init>(ServletWebRequest.java:83)
>       at 
> org.apache.wicket.protocol.http.WebApplication.newWebRequest(WebApplication.java:675)
>       at 
> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:424)
>       at 
> org.apache.wicket.protocol.http.WicketServlet.doPost(WicketServlet.java:160)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
>       at 
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
>       at 
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
>       at {filter}
>       at 
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
>       at 
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
>       at 
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
>       at 
> org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
>       at 
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
>       at 
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>       at 
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
>       at 
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
>       at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
>       at 
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>       at org.mortbay.jetty.Server.handle(Server.java:326)
>       at 
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
>       at 
> org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)
>       at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)
>       at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
>       at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
>       at 
> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
>       at 
> org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:713)
>       at 
> org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
> We suggest an easy fix: catch the IllegalStateException in line 83 of 
> org.apache.wicket.protocol.http.servlet.ServletWebRequest and just log an 
> error (please check whether it really has to be an error to be logged). In 
> effect no ajaxHeader will be read and an Wicket's Internal Error page will be 
> shown:
> Possible solution in Wicket 1.4.15, 1.4.17 (didn't check 1.4.16), 
> ServletWebRequest, line 83:
>               try
>               {
>                       if (Strings.isEmpty(ajaxHeader))
>                               ajaxHeader = 
> httpServletRequest.getParameter("wicket:ajax");
>               }
>               catch (IllegalStateException exception)
>               {
>                       log.error("IllegalStateException occured reading 
> \"wicket:ajax\"-Parameter: " +
>                               exception.getMessage());
>               }
> Please consider checking Wicket 1.5. I just checked ServletWebRequest, which 
> has been refactored apparently. Line 214 (Enumeration<String> e = 
> httpServletRequest.getHeaders(name);) may be critical, as well as methods 
> protected Map<String, List<StringValue>> generatePostParameters() and 
> getQueryParameters(). Couldn't check that by now. Please let me know, if you 
> want me to analyze that error more intensely and suggest a fix in Wicket 1.5. 
> We consider that bug as "Major" or "Critical", as the whole Servlet Container 
> StackTrace is potentially displayed.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to