[prev in list] [next in list] [prev in thread] [next in thread] 

List:       tomcat-dev
Subject:    Re: MultipartRequest upload failing with large files
From:       Bojan Smojver <bojan () binarix ! com>
Date:       2002-03-30 0:21:15
[Download RAW message or body]

Don't use TC 4, but I can confirm that similar does work in TC
3.3/mod_jk 1.2/Apache 1.3.23/mod_ssl 2.8.7. I've just uploaded a 17 MB
binary file without problems (given there is enough memory for JVM).
However, I don't use O'Reilly class (*VERY* silly license), but my own
(which you can get from here
ftp://ftp.binarix.com/pub/params/params.tar.gz, it is licensed GPL and
it comes without any documentation ;-).

Bojan

On Sat, 2002-03-30 at 08:30, Matt.Cowley@providersolutions.net wrote:
> Hi folks.  Jason Hunter suggested I send this notice to the list, so here
> it is.
> 
> ----- Forwarded by Matt Cowley/Providersolutions on 03/29/02 04:33 PM -----
> 
> Matt Cowley                                                                         \
>                 
> To:     serlvet-interest@java.sun.com                                     
> 03/26/02             cc:                                                            \
>  03:04 PM             Subject:     MultipartRequest upload failing with large files \
>  
> 
> 
> 
> 
> 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, e-mail:   <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>
> 



--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@jakarta.apache.org>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic