You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2016/07/29 19:39:22 UTC

[Bug 59912] New: CoyoteReader.readLine throws IO exception on multi line POST of exactly 8192 bytes

https://bz.apache.org/bugzilla/show_bug.cgi?id=59912

            Bug ID: 59912
           Summary: CoyoteReader.readLine throws IO exception on multi
                    line POST of exactly 8192 bytes
           Product: Tomcat 8
           Version: 8.0.33
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: Peter.Teunissen@cerner.com

Created attachment 34080
  --> https://bz.apache.org/bugzilla/attachment.cgi?id=34080&action=edit
Zip with fiddler trace, servlet Java source, web.xml

Tomcat 8.0.33 (also fails on 7.0.55)
JDK 1.8.0_66

Wrote a servlet that simply calls readLine() on the
HttpServletRequest.getReader() and dumps the incoming lines.

When I do a POST that has at least two lines in the body, with a content-length
of exactly 8192 bytes, the last readLine() call throws an IOException.

8191 works fine, 8193 works fine, but 8192 bombs.

java.io.IOException
    at org.apache.catalina.connector.InputBuffer.reset(InputBuffer.java:576)
    at org.apache.catalina.connector.CoyoteReader.reset(CoyoteReader.java:142)
    at
org.apache.catalina.connector.CoyoteReader.readLine(CoyoteReader.java:200)
    at com.cerner.TestServlet.service(TestServlet.java:33)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
    at
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

See attached servlet source, fiddler trace file.

-- 
You are receiving this mail because:
You are the assignee for the bug.

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


[Bug 59912] CoyoteReader.readLine throws IO exception on multi line POST of exactly 8192 bytes

Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=59912

--- Comment #5 from Mark Thomas <ma...@apache.org> ---
Replaying with Fiddler I see the same problem with 9.0.x as well.
Investigating...

-- 
You are receiving this mail because:
You are the assignee for the bug.

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


[Bug 59912] CoyoteReader.readLine throws IO exception on multi line POST of exactly 8192 bytes

Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=59912

--- Comment #3 from Peter Teunissen <Pe...@cerner.com> ---
I tested this by replaying the transaction through fiddler.

When I hit it through CURL, it always posts is such away that in one call to
readLine() we get all the data.

When submitted from fiddler, it does the first readLine(), then enters the loop
to do additional readLines() and fails on the last:

Content-length:8192
Read-1:109 bytes  magnis dis parturient montes, nascetur ridiculus mus. Donec
quam felis, ultricies nec, pellentesque eu, pret
Read-2:122 bytes ium uis, sem. Nulla consequat massa quis enim. Donec pede
justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim
Read-2:124 bytes  justo, rhoncus ut, imperdiet a, venenatis vitae, justo. 

(many Read-2's)

ipsum aliquam libero, non adipiscing dolor urna a orci.
java.io.IOExceptionError caught:null
Size: 7938 Len:27 Request:!!! We had an error!!! null

    at org.apache.catalina.connector.InputBuffer.reset(InputBuffer.java:521)
    at org.apache.catalina.connector.CoyoteReader.reset(CoyoteReader.java:142)


Through CURL with an input file:

$ curl -is -X POST --data @test.log http://localhost:8080/coyrdr/test

Content-length:8192
Read-1:8192 bytes  magnis dis parturient 
--blablabla--
aliquam libero, non adipiscing dolor urna a orci. Nulla porta dolor. Class
aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos
hymenaeos. Pelxxl
Reading-2 string=null

-- 
You are receiving this mail because:
You are the assignee for the bug.

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


[Bug 59912] CoyoteReader.readLine throws IO exception on multi line POST of exactly 8192 bytes

Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=59912

--- Comment #2 from Coty Sutherland <cs...@redhat.com> ---
Can you provide a data file to use that you can reliably reproduce this with? I
tried creating a file of size 8192 (and using the request contents from the
fiddler logging), but don't see any issues in 8.0.33 or 8.0.x-dev. I'm testing
with the following using your servlet packaged into asf-test.war:

curl -is -X POST --data @test2.dat http://localhost:8080/asf-test/test

-- 
You are receiving this mail because:
You are the assignee for the bug.

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


[Bug 59912] CoyoteReader.readLine throws IO exception on multi line POST of exactly 8192 bytes

Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=59912

--- Comment #1 from Peter Teunissen <Pe...@cerner.com> ---
Seems to be same (similar?) issue as bug 42727

-- 
You are receiving this mail because:
You are the assignee for the bug.

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


[Bug 59912] CoyoteReader.readLine throws IO exception on multi line POST of exactly 8192 bytes

Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=59912

Mark Thomas <ma...@apache.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #6 from Mark Thomas <ma...@apache.org> ---
Thanks for the report and test case. This has been fixed in the following
versions:
9.0.x for 9.0.0.M10 onwards
8.5.x for 8.5.5 onwards
8.0.x for 8.0.37 onwards
7.0.x for 7.0.71 onwards

-- 
You are receiving this mail because:
You are the assignee for the bug.

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


[Bug 59912] CoyoteReader.readLine throws IO exception on multi line POST of exactly 8192 bytes

Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=59912

Peter Teunissen <Pe...@cerner.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |Peter.Teunissen@cerner.com

-- 
You are receiving this mail because:
You are the assignee for the bug.

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


[Bug 59912] CoyoteReader.readLine throws IO exception on multi line POST of exactly 8192 bytes

Posted by bu...@apache.org.
https://bz.apache.org/bugzilla/show_bug.cgi?id=59912

--- Comment #4 from Peter Teunissen <Pe...@cerner.com> ---
(In reply to Coty Sutherland from comment #2)
> Can you provide a data file to use that you can reliably reproduce this
> with? I tried creating a file of size 8192 (and using the request contents
> from the fiddler logging), but don't see any issues in 8.0.33 or 8.0.x-dev.
> I'm testing with the following using your servlet packaged into asf-test.war:
> 
> curl -is -X POST --data @test2.dat http://localhost:8080/asf-test/test

Found a way to reproduce with curl using --data-binary and a multi line input
file. Keep tweaking the input until the servlet shows exactly Content-Length=
8192.

$ curl -is -X POST --data-binary @test.log http://localhost:8081/coyrdr/test

-- 
You are receiving this mail because:
You are the assignee for the bug.

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