Defer cleanup in DefaultServerWebExchange

This commit ensures that the multipartRead flag is read in a deferred
block, and is not evaluated too early.

Closes gh-31567
This commit is contained in:
Arjen Poutsma 2023-10-25 10:38:37 +02:00
parent 7f94c64b72
commit dc26d3b0ec
1 changed files with 14 additions and 12 deletions

View File

@ -247,18 +247,20 @@ public class DefaultServerWebExchange implements ServerWebExchange {
@Override
public Mono<Void> cleanupMultipart() {
if (this.multipartRead) {
return getMultipartData()
.onErrorResume(t -> Mono.empty()) // ignore errors reading multipart data
.flatMapIterable(Map::values)
.flatMapIterable(Function.identity())
.flatMap(part -> part.delete()
.onErrorResume(ex -> Mono.empty()))
.then();
}
else {
return Mono.empty();
}
return Mono.defer(() -> {
if (this.multipartRead) {
return getMultipartData()
.onErrorComplete()
.flatMapIterable(Map::values)
.flatMapIterable(Function.identity())
.flatMap(part -> part.delete()
.onErrorComplete())
.then();
}
else {
return Mono.empty();
}
});
}
@Override