Avoid ClassCastException in TomcatHttpHandlerAdapter

Closes gh-24707
This commit is contained in:
Rossen Stoyanchev
2020-03-19 12:17:24 +00:00
parent 5b27df772a
commit b121c0e2ea

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2018 the original author or authors.
* Copyright 2002-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@ import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import javax.servlet.AsyncContext;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
@@ -131,13 +132,17 @@ public class TomcatHttpHandlerAdapter extends ServletHttpHandlerAdapter {
@Override
protected DataBuffer readFromInputStream() throws IOException {
ServletInputStream inputStream = ((ServletRequest) getNativeRequest()).getInputStream();
if (!(inputStream instanceof CoyoteInputStream)) {
// It's possible InputStream can be wrapped, preventing use of CoyoteInputStream
return super.readFromInputStream();
}
boolean release = true;
int capacity = this.bufferSize;
DataBuffer dataBuffer = this.factory.allocateBuffer(capacity);
try {
ByteBuffer byteBuffer = dataBuffer.asByteBuffer(0, capacity);
ServletRequest request = getNativeRequest();
int read = ((CoyoteInputStream) request.getInputStream()).read(byteBuffer);
int read = ((CoyoteInputStream) inputStream).read(byteBuffer);
logBytesRead(read);
if (read > 0) {
dataBuffer.writePosition(read);