Mantis - Resin
Viewing Issue Advanced Details
3766 minor always 11-16-09 15:03 12-16-09 10:20
alex  
ferg  
normal  
closed 3.1.8  
fixed  
none    
none 4.0.3  
0003766: file servlet throws ArrayIndexOutOfBoundsException with negative range
reported by Knut Forkalsrud
  Accept-Language: zh-cn,zh-hk,zh-tw,en-us
          User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
          Accept: */*
          Host: www.mydomain.com
          Connection: Keep-Alive
          Range: bytes=-335544320--1162852624
          Accept-Encoding: gzip
          X-Forwarded-For: 124.115.0.146

This results in an exception like this:

java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at com.caucho.vfs.WriteStream.write(WriteStream.java:301)
at com.caucho.server.connection.ResponseStream.writeNext(ResponseStream.java:445)
at com.caucho.server.connection.ToByteResponseStream.write(ToByteResponseStream.java:336)
at com.caucho.server.connection.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:67)
at com.caucho.vfs.ReadStream.writeToStream(ReadStream.java:899)
at com.caucho.servlets.FileServlet.handleRange(FileServlet.java:498)
at com.caucho.servlets.FileServlet.service(FileServlet.java:325)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103)
at com.caucho.server.webapp.NamedDispatcherImpl.forward(NamedDispatcherImpl.java:108)
at com.mydomain.www.MyServlet.doGet(BaseServlet.java:167)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:114)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:91)
at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:103)
at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:187)
at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:265)
at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:273)
at com.caucho.server.port.TcpConnection.run(TcpConnection.java:682)
at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:730)
at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:649)
at java.lang.Thread.run(Thread.java:595)


(I'm forwarding the request to the FileServlet). No harm done here, the requests seems to fail
without causing any other side effects, but I'm wondering if the FileServlet should handle the
situation a little more gracefully and give a 4xx response code instead of throwing an exception,
which ends up being a 5xx response code.

Notes
(0004337)
ferg   
12-16-09 10:20   
server/058m