Great bug report! This isn't related to the AIOOBE exception that was common with Servlet API 2.0. It looks to me like you've found a bug in the ajp13 connection logic. I'd suggest posting to tomcat-dev with this report. In the meanwhile, I'd experiment with a different connector.
Please let me know what you find, since any workaround or fix you find should be added to the bugs page. -jh- Matthew Cowley wrote: > > Hi folks. We're having problems uploading large files with the OReilly > MultipartRequest class when using ssl. Files under 10mb work fine. If we > upload more than that (in one large file or a combination of smaller ones), > we get an Array Index Out of Bounds exception (dump follows). This only > happens going through ssl; non-secure uploads work fine with very large > files. > > I found a very similar bug report on the servlets.com site (description > follows), and upgraded to the 19-Jun-2001 version of the > com.oreilly.servlet package. Same symptoms after the upgrade. > > Any ideas or help would be most appreciated. Thanks. > > -matt > > Environment: > ------------ > - Win2000 Server, patched up to latest levels > - Tomcat 4.0.1 Binary distribution, running as a service > - IIS 5.0, using ISAPI_Redirect.dll dated 12/08/01 (Thank you Henri Gomez!) > - SSL Enabled through IIS > - I have several servers with similar environments. Some servers have > multiple logical web servers with multiple Tomcat instances. This > particular server has only one instance of each. However, the same > behavior > is observed on any server/instance with SSL. > > Facts: > ------ > 1] This only happens on https://, all other forms work fine. > 2] This only happens on files larger than just under 11MB (11,172,378 > bytes, > plus or minus a few bytes for filename payload). > 3] The "Assert Failed" error comes from Ajp13.java, Ajp13Packet.java, or > MsgAjp.java. I am not a Java programmer (yes, another one of those > 'systems' guys), but was able to dig throught the source to find the actual > system.out lines. > 4] 11,172,378 / 1364 = 8191+-, the same size as the ajp packet. Why 1364 > ajp packets? Anything smaller works fine. > > Here's the bug report from servlets.com: > > Bug: File upload does not work with Apache JServ when uploading large > binary files > > Symptoms: When handling a file upload the > com.oreilly.servlet.MultipartRequest class throws an > ArrayIndexOutOfBoundsException. > > Reason: JServ supports the older Servlet API 2.0 and in the API 2.0 source > code for > javax.servlet.ServletInputStream there's a bug in the readLine(byte[] buf, > int off, int len) method > where the len parameter is ignored, and as a result reading input lines > that exceed the buf length > will throw an ArrayIndexOutOfBoundsException. > > Workaround: The com.oreilly.servlet library has implemented its own > buffering to work around this > issue. If you're using another library, upgrade to a server that supports > Servlet API 2.1 or later. > > Here's the exception dump: > 14:24:22,311 [Ajp13Processor[8009][24]] ERROR > com.psc.ams.servlets.PSCUploadFilesByExtension - > Unexpected Exception occured in PSCUploadFiles.doPost(). > > java.lang.ArrayIndexOutOfBoundsException > > at java.lang.System.arraycopy(Native Method) > > at org.apache.ajp.Ajp13Packet.getBytes(Ajp13Packet.java:459) > > at org.apache.ajp.Ajp13.refillReadBuffer(Ajp13.java:641) > > at org.apache.ajp.Ajp13.doRead(Ajp13.java:594) > > at > org.apache.ajp.tomcat4.Ajp13InputStream.read(Ajp13InputStream.java:99) > > at > > >com.oreilly.servlet.multipart.BufferedServletInputStream.fill(BufferedServletInputStream.java:63) > > at > > >com.oreilly.servlet.multipart.BufferedServletInputStream.readLine(BufferedServletInputStream.java:107) > > at > > >com.oreilly.servlet.multipart.LimitedServletInputStream.readLine(LimitedServletInputStream.java:59) > > at > com.oreilly.servlet.multipart.PartInputStream.fill(PartInputStream.java:92) > > at > com.oreilly.servlet.multipart.PartInputStream.read(PartInputStream.java:190) > > at > com.oreilly.servlet.multipart.PartInputStream.read(PartInputStream.java:151) > > at com.oreilly.servlet.multipart.FilePart.write(FilePart.java:186) > > at com.oreilly.servlet.multipart.FilePart.writeTo(FilePart.java:145) > > at > com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:139) > > at > >com.psc.ams.servlets.PSCUploadFilesByExtension.doPost(PSCUploadFilesByExtension.java:480) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) > > at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) > > at > > >org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) > > at > >org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) > > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243) > > at > org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) > > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) > > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) > > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201) > > at > org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) > > at > org.apache.catalina.valves.RequestDumperValve.invoke(RequestDumperValve.java:221) > > at > org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) > > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) > > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) > > at > org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344) > > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164) > > at > org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) > > at > org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170) > > at > org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) > > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170) > > at > org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564) > > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) > > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) > > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163) > > at > org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566) > > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472) > > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943) > > at > org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:371) > > at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:424) > > at java.lang.Thread.run(Thread.java:484) > > ___________________________________________________________________________ > To unsubscribe, send email to [EMAIL PROTECTED] and include in the body > of the message "signoff SERVLET-INTEREST". > > Archives: http://archives.java.sun.com/archives/servlet-interest.html > Resources: http://java.sun.com/products/servlet/external-resources.html > LISTSERV Help: http://www.lsoft.com/manuals/user/user.html ___________________________________________________________________________ To unsubscribe, send email to [EMAIL PROTECTED] and include in the body of the message "signoff SERVLET-INTEREST". Archives: http://archives.java.sun.com/archives/servlet-interest.html Resources: http://java.sun.com/products/servlet/external-resources.html LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
