Consistent maxPartSize check in PartEventHttpMessageReader

Closes gh-37028
This commit is contained in:
rstoyanchev
2026-08-14 09:19:58 +02:00
committed by Brian Clozel
parent 9312e25e24
commit 1c77e241e6
2 changed files with 18 additions and 0 deletions
@@ -188,6 +188,9 @@ public class PartEventHttpMessageReader extends LoggingCodecSupport implements H
if (this.maxPartSize == -1) {
maxSize = this.maxInMemorySize;
}
else if (this.maxInMemorySize == -1) {
maxSize = (int) Math.min(Integer.MAX_VALUE, this.maxPartSize);
}
else {
// maxInMemorySize is an int, so we can safely cast the long result of Math.min
maxSize = (int) Math.min(this.maxInMemorySize, this.maxPartSize);
@@ -255,6 +255,21 @@ class PartEventHttpMessageReaderTests extends AbstractLeakCheckingTests {
.verify();
}
@Test
void partSizeTooLargeWithUnlimitedMemorySize() {
MockServerHttpRequest request = createRequest("simple.multipart", "simple-boundary");
PartEventHttpMessageReader reader = new PartEventHttpMessageReader();
reader.setMaxPartSize(10);
reader.setMaxInMemorySize(-1);
Flux<PartEvent> result = reader.read(forClass(PartEvent.class), request, emptyMap());
StepVerifier.create(result)
.expectError(DataBufferLimitException.class)
.verify();
}
@Test
void formPartTooLarge() {
MockServerHttpRequest request = createRequest(