Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 352421

Summary: IllegalArgumentException in HttpServletResponse.encodeURL() with a relative path in the url.
Product: [RT] Jetty Reporter: Felix W. <jfwittmann>
Component: serverAssignee: Greg Wilkins <gregw>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P3 CC: janb, jetty-inbox
Version: 7.4.4   
Target Milestone: 7.5.x   
Hardware: PC   
OS: Windows 7   
Whiteboard:

Description Felix W. CLA 2011-07-19 04:58:13 EDT
Build Identifier: 7.4.4


Not sure, but maybe this fix  "351199 HttpServletResponse.encodeURL() wrongly encodes an url without path when cookies are disabled" is responsibly for this  problem. 

java.lang.IllegalArgumentException: !(SCHEME|PATH|AUTH):./?wicket:interface=:1:1::::
	at org.eclipse.jetty.http.HttpURI.parse2(HttpURI.java:243)


Reproducible: Always

Steps to Reproduce:
This error is thrown in a testcase. where I first:
1. delete all visible cookies
2. Open a page with a relative url like '../' or './'
Comment 1 Felix W. CLA 2011-07-19 04:59:16 EDT
java.lang.IllegalArgumentException: !(SCHEME|PATH|AUTH):./?wicket:interface=:1:1::::
	at org.eclipse.jetty.http.HttpURI.parse2(HttpURI.java:243)
	at org.eclipse.jetty.http.HttpURI.parse(HttpURI.java:110)
	at org.eclipse.jetty.http.HttpURI.<init>(HttpURI.java:92)
	at org.eclipse.jetty.server.Response.encodeURL(Response.java:204)
	at org.apache.wicket.protocol.http.WebResponse.encodeURL(WebResponse.java:137)
	at org.apache.wicket.protocol.http.request.urlcompressing.UrlCompressingWebCodingStrategy.encode(UrlCompressingWebCodingStrategy.java:143)
	at org.apache.wicket.protocol.http.request.WebRequestCodingStrategy.encode(WebRequestCodingStrategy.java:296)
	at de.ponton.cmh.ui.base.components.wicket.BaseWebApplication$1$1.encode(BaseWebApplication.java:138)
	at org.apache.wicket.RequestCycle.encodeUrlFor(RequestCycle.java:811)
	at org.apache.wicket.RequestCycle.urlFor(RequestCycle.java:943)
	at org.apache.wicket.RequestCycle.urlFor(RequestCycle.java:976)
	at org.apache.wicket.Component.urlFor(Component.java:3445)
	at org.apache.wicket.markup.html.link.Link.getURL(Link.java:376)
	at org.apache.wicket.markup.html.link.Link.onComponentTag(Link.java:417)
	at org.apache.wicket.Component.renderComponent(Component.java:2661)
	at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1539)
	at org.apache.wicket.Component.render(Component.java:2521)
	at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1441)
	at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1555)
	at org.apache.wicket.Page.onRender(Page.java:1594)
	at org.apache.wicket.Component.render(Component.java:2521)
	at org.apache.wicket.Page.renderPage(Page.java:932)
	at org.apache.wicket.request.target.component.PageRequestTarget.respond(PageRequestTarget.java:63)
	at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:105)
	at org.apache.wicket.RequestCycle.respond(RequestCycle.java:1267)
	at org.apache.wicket.RequestCycle.step(RequestCycle.java:1334)
	at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
	at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
	at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
	at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:538)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1352)
	at de.ponton.cmh.ui.base.components.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:98)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1323)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:476)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:517)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:225)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:937)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:183)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:871)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
	at org.eclipse.jetty.server.Server.handle(Server.java:346)
	at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:589)
	at org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1048)
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:601)
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:214)
	at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:411)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:535)
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:529)
	at java.lang.Thread.run(Unknown Source)
Comment 2 Jan Bartel CLA 2011-07-21 20:55:02 EDT
Greg,

Can you take a look at the HttpURI parser ... we are now parsing uris in Response.encodeURL() (for bug #351199) where we might not have before.  The example url does not seem to parse correctly.

Jan
Comment 3 Greg Wilkins CLA 2011-07-21 21:28:12 EDT
I have fixed this in HEAD and it will be in 7.5.0.
The question is, do we need to make a 7.4.5 for this also?