diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/PartEventHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/PartEventHttpMessageReader.java index b415d58df19..b6f82009093 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/PartEventHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/PartEventHttpMessageReader.java @@ -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); diff --git a/spring-web/src/test/java/org/springframework/http/codec/multipart/PartEventHttpMessageReaderTests.java b/spring-web/src/test/java/org/springframework/http/codec/multipart/PartEventHttpMessageReaderTests.java index 79d7881a254..5f9671b91e2 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/multipart/PartEventHttpMessageReaderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/multipart/PartEventHttpMessageReaderTests.java @@ -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 result = reader.read(forClass(PartEvent.class), request, emptyMap()); + + StepVerifier.create(result) + .expectError(DataBufferLimitException.class) + .verify(); + } + @Test void formPartTooLarge() { MockServerHttpRequest request = createRequest(