Skip to content

Commit f738273

Browse files
committed
Fix buffering issue in StringDecoder
Issue: SPR-17418
1 parent 1c67ef4 commit f738273

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.springframework.core.io.buffer.DataBuffer;
3434
import org.springframework.core.io.buffer.DataBufferUtils;
3535
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
36+
import org.springframework.core.io.buffer.PooledDataBuffer;
3637
import org.springframework.core.log.LogFormatUtils;
3738
import org.springframework.lang.Nullable;
3839
import org.springframework.util.Assert;
@@ -96,7 +97,8 @@ public Flux<String> decode(Publisher<DataBuffer> inputStream, ResolvableType ele
9697
Flux<DataBuffer> inputFlux = Flux.from(inputStream)
9798
.flatMap(dataBuffer -> splitOnDelimiter(dataBuffer, delimiterBytes))
9899
.bufferUntil(StringDecoder::isEndFrame)
99-
.flatMap(StringDecoder::joinUntilEndFrame);
100+
.flatMap(StringDecoder::joinUntilEndFrame)
101+
.doOnDiscard(PooledDataBuffer.class, DataBufferUtils::release);
100102
return super.decode(inputFlux, elementType, mimeType, hints);
101103
}
102104

spring-core/src/test/java/org/springframework/core/codec/StringDecoderTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,9 @@ public void decodeEmptyDataBuffer() {
176176
@Test
177177
public void decodeError() {
178178
DataBuffer fooBuffer = stringBuffer("foo\n");
179+
DataBuffer barBuffer = stringBuffer("bar");
179180
Flux<DataBuffer> source =
180-
Flux.just(fooBuffer).concatWith(Flux.error(new RuntimeException()));
181+
Flux.just(fooBuffer, barBuffer).concatWith(Flux.error(new RuntimeException()));
181182

182183
Flux<String> output = this.decoder.decode(source,
183184
ResolvableType.forClass(String.class), null, Collections.emptyMap());

0 commit comments

Comments
 (0)