https://bz.apache.org/bugzilla/show_bug.cgi?id=63573
Bug ID: 63573
Summary: For some requests, ServletInputStream.read(byte[]
buffer) repeatedly returns 0 at EOF, fails to return
-1
Product: Tomcat 8
Version: 8.5.38
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: Catalina
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ----
This happens for 5-12 POST requests daily, on a system that gets around 50,000
POST requests a day. All POST requests are for the same servlet, an XML payload
is posted to it.
I've traced the code to InputBuffer.read(byte,offset,length) and the problem is
probably with InputBuffer.checkByteBufferEof() which seems to determine if EOF
is reached in that code.
When it happens, the simple stream copy loop below will turn into a tight, CPU
hogging endless loop with each read returning 0 bytes:
InputStream xmlis = request.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int n = 0;
byte[] buff = new byte[xmlis.available()];
do {
n = xmlis.read(buff);
if (n > 0) {
baos.write(buff, 0, n);
}
} while (n >= 0);
baos.close();
I've implemented a timeout mechanism as a workaround, and the data arrives
intact, albeit after a few thousand reads with 0 bytes returned.
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]