提交 d3d40983 编写于 作者: A Arjen Poutsma

Corrupt multipart should not hang SynchronossPartHttpMessageReader

This commit notifies the Synchronoss listener that the buffer stream
has ended.

Closes gh-23768

(cherry picked from commit bf36f49d)
上级 32adf77b
......@@ -18,6 +18,7 @@ package org.springframework.http.codec.multipart;
import java.io.File;
import java.io.IOException;
import java.nio.channels.ReadableByteChannel;
import java.time.Duration;
import java.util.Map;
import java.util.function.Consumer;
......@@ -44,6 +45,7 @@ import org.springframework.mock.http.server.reactive.test.MockServerHttpRequest;
import org.springframework.util.MultiValueMap;
import static java.util.Collections.emptyMap;
import static java.util.Collections.singletonMap;
import static org.hamcrest.core.StringStartsWith.startsWith;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
......@@ -149,6 +151,24 @@ public class SynchronossPartHttpMessageReaderTests {
subscriber.cancel();
}
@Test
public void gh23768() throws IOException {
ReadableByteChannel channel = new ClassPathResource("invalid.multipart", getClass()).readableChannel();
Flux<DataBuffer> body = DataBufferUtils.readByteChannel(() -> channel, this.bufferFactory, 1024);
MediaType contentType = new MediaType("multipart", "form-data",
singletonMap("boundary", "NbjrKgjbsaMLdnMxMfDpD6myWomYc0qNX0w"));
ServerHttpRequest request = MockServerHttpRequest.post("/")
.contentType(contentType)
.body(body);
Mono<MultiValueMap<String, Part>> parts = this.reader.readMono(PARTS_ELEMENT_TYPE, request, emptyMap());
StepVerifier.create(parts)
.assertNext(result -> assertThat(result).isEmpty())
.verifyComplete();
}
@Test
public void readTooManyParts() {
testMultipartExceptions(reader -> reader.setMaxParts(1), ex -> {
......
--NbjrKgjbsaMLdnMxMfDpD6myWomYc0qNX0w
Content-Disposition: form-data; name="part-00-name"
post-payload-text-23456789ABCDEF:post-payload-0001-3456789ABCDEF:post-payload-0002-3456789ABCDEF:post-payload-0003-3456789ABCDEF
--NbjrKgjbsaMLdnMxMfDpD6myWomYc
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册