From dc26d3b0ec5caa869b91617e1a3c58fd99be80a2 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Wed, 25 Oct 2023 10:38:37 +0200 Subject: [PATCH] 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 --- .../adapter/DefaultServerWebExchange.java | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java b/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java index b7b63d0def0..21a3193158e 100644 --- a/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java +++ b/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java @@ -247,18 +247,20 @@ public class DefaultServerWebExchange implements ServerWebExchange { @Override public Mono 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