Use more appropriate exception so a bad request triggers a 400 response
diff --git a/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java b/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java
index 57637f8..fb6df01 100644
--- a/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java
+++ b/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java
@@ -24,6 +24,7 @@
import java.util.Map;
import java.util.Set;
+import org.apache.coyote.BadRequestException;
import org.apache.coyote.InputBuffer;
import org.apache.coyote.Request;
import org.apache.coyote.http11.Constants;
@@ -162,7 +163,7 @@
if (remaining <= 0) {
if (!parseChunkHeader()) {
- throwIOException(sm.getString("chunkedInputFilter.invalidHeader"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.invalidHeader"));
}
if (endChunk) {
parseEndChunk();
@@ -174,7 +175,7 @@
if (readChunk == null || readChunk.position() >= readChunk.limit()) {
if (readBytes() < 0) {
- throwIOException(sm.getString("chunkedInputFilter.eos"));
+ throwEOFException(sm.getString("chunkedInputFilter.eos"));
}
}
@@ -229,7 +230,7 @@
while ((read = doRead(this)) >= 0) {
swallowed += read;
if (maxSwallowSize > -1 && swallowed > maxSwallowSize) {
- throwIOException(sm.getString("inputFilter.maxSwallow"));
+ throwBadRequestException(sm.getString("inputFilter.maxSwallow"));
}
}
@@ -367,7 +368,7 @@
// validated. Currently it is simply ignored.
extensionSize++;
if (maxExtensionSize > -1 && extensionSize > maxExtensionSize) {
- throwIOException(sm.getString("chunkedInputFilter.maxExtension"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.maxExtension"));
}
}
@@ -406,23 +407,23 @@
while (!eol) {
if (readChunk == null || readChunk.position() >= readChunk.limit()) {
if (readBytes() <= 0) {
- throwIOException(sm.getString("chunkedInputFilter.invalidCrlfNoData"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.invalidCrlfNoData"));
}
}
byte chr = readChunk.get(readChunk.position());
if (chr == Constants.CR) {
if (crfound) {
- throwIOException(sm.getString("chunkedInputFilter.invalidCrlfCRCR"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.invalidCrlfCRCR"));
}
crfound = true;
} else if (chr == Constants.LF) {
if (!tolerant && !crfound) {
- throwIOException(sm.getString("chunkedInputFilter.invalidCrlfNoCR"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.invalidCrlfNoCR"));
}
eol = true;
} else {
- throwIOException(sm.getString("chunkedInputFilter.invalidCrlf"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.invalidCrlf"));
}
readChunk.position(readChunk.position() + 1);
@@ -499,9 +500,9 @@
colon = true;
} else if (!HttpParser.isToken(chr)) {
// Non-token characters are illegal in header names
- throwIOException(sm.getString("chunkedInputFilter.invalidTrailerHeaderName"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.invalidTrailerHeaderName"));
} else if (trailingHeaders.getEnd() >= trailingHeaders.getLimit()) {
- throwIOException(sm.getString("chunkedInputFilter.maxTrailer"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.maxTrailer"));
} else {
trailingHeaders.append(chr);
}
@@ -540,7 +541,7 @@
// limit placed on trailing header size
int newlimit = trailingHeaders.getLimit() -1;
if (trailingHeaders.getEnd() > newlimit) {
- throwIOException(sm.getString("chunkedInputFilter.maxTrailer"));
+ throwBadRequestException(sm.getString("chunkedInputFilter.maxTrailer"));
}
trailingHeaders.setLimit(newlimit);
} else {
@@ -616,9 +617,9 @@
}
- private void throwIOException(String msg) throws IOException {
+ private void throwBadRequestException(String msg) throws IOException {
error = true;
- throw new IOException(msg);
+ throw new BadRequestException(msg);
}