guice-servlet fails on welcome files: wrong pathInfo.
- Dominant language
- Java
- Stars
- 12.7k
- Forks
- 1.7k
- Avg merge
- 11m
- Merged PRs (30d)
- 2
Description
I'm not sure whether this bug is in Jetty or Guice-Servlet.
Guice Servlet 4.0
Jetty 9.3.7.v20160115 (servlet-api-3.1.0)
This may or may not relate to or even caused by #372.
Having this config:
``` java
serve("/", "index.html")
.with(new org.eclipse.jetty.servlet.DefaultServlet());
```
and handling `GET /` request, DefaultServlet forwards it to welcome file to path "index.html".
Guice-servlet wraps the forwarded request and sets newRequestUri=="index.html", but with the same servletPath=="/" and null pathInfo.
So when DefaultServlet() sees the forwarded request again, it sums servletPath + pathInfo and gets "/" again, not "index.html", falling into infinite loop. Here's the stacktrace:
```
java.lang.StackOverflowError
...
at javax.servlet.ServletRequestWrapper.removeAttribute(ServletRequestWrapper.java:302)
at javax.servlet.ServletRequestWrapper.removeAttribute(ServletRequestWrapper.java:302)
at javax.servlet.ServletRequestWrapper.removeAttribute(ServletRequestWrapper.java:302)
at javax.servlet.ServletRequestWrapper.removeAttribute(ServletRequestWrapper.java:302)
at com.google.inject.servlet.ManagedServletPipeline$1.doServiceImpl(ManagedServletPipeline.java:156)
at com.google.inject.servlet.ManagedServletPipeline$1.forward(ManagedServletPipeline.java:140)
at org.eclipse.jetty.servlet.DefaultServlet.sendWelcome(DefaultServlet.java:600)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:486)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ManagedServletPipeline$1.doServiceImpl(ManagedServletPipeline.java:154)
at com.google.inject.servlet.ManagedServletPipeline$1.forward(ManagedServletPipeline.java:140)
at org.eclipse.jetty.servlet.DefaultServlet.sendWelcome(DefaultServlet.java:600)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:486)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ManagedServletPipeline$1.doServiceImpl(ManagedServletPipeline.java:154)
at com.google.inject.servlet.ManagedServletPipeline$1.forward(ManagedServletPipeline.java:140)
at org.eclipse.jetty.servlet.DefaultServlet.sendWelcome(DefaultServlet.java:600)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:486)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ManagedServletPipeline$1.doServiceImpl(ManagedServletPipeline.java:154)
at com.google.inject.servlet.ManagedServletPipeline$1.forward(ManagedServletPipeline.java:140)
at org.eclipse.jetty.servlet.DefaultServlet.sendWelcome(DefaultServlet.java:600)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:486)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ManagedServletPipeline$1.doServiceImpl(ManagedServletPipeline.java:154)
at com.google.inject.servlet.ManagedServletPipeline$1.forward(ManagedServletPipeline.java:140)
at org.eclipse.jetty.servlet.DefaultServlet.sendWelcome(DefaultServlet.java:600)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:486)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:277)
at com.google.inject.servlet.ManagedServletPipeline$1.doServiceImpl(ManagedServletPipeline.java:154)
at com.google.inject.servlet.ManagedServletPipeline$1.forward(ManagedServletPipeline.java:140)
at org.eclipse.jetty.servlet.DefaultServlet.sendWelcome(DefaultServlet.java:600)
at org.eclipse.jetty.servlet.DefaultServlet.doGet(DefaultServlet.java:486)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:287)
```
Contributor guide
Assessment
This issue has not been assessed yet.