@@ -233,16 +233,21 @@ public Mono<Void> write(Publisher<? extends Resource> inputStream, @Nullable Res
233233 ranges = request .getHeaders ().getRange ();
234234 }
235235 catch (IllegalArgumentException ex ) {
236- response .setStatusCode (HttpStatus .REQUESTED_RANGE_NOT_SATISFIABLE );
237- return response .setComplete ();
236+ return handleInvalidRange (response );
238237 }
239238
240239 return Mono .from (inputStream ).flatMap (resource -> {
241240 if (ranges .isEmpty ()) {
242241 return writeResource (resource , elementType , mediaType , response , hints );
243242 }
244243 response .setStatusCode (HttpStatus .PARTIAL_CONTENT );
245- List <ResourceRegion > regions = HttpRange .toResourceRegions (ranges , resource );
244+ List <ResourceRegion > regions ;
245+ try {
246+ regions = HttpRange .toResourceRegions (ranges , resource );
247+ }
248+ catch (IllegalArgumentException ex ) {
249+ return handleInvalidRange (response );
250+ }
246251 MediaType resourceMediaType = getResourceMediaType (mediaType , resource , hints );
247252 if (regions .size () == 1 ){
248253 ResourceRegion region = regions .get (0 );
@@ -268,6 +273,11 @@ public Mono<Void> write(Publisher<? extends Resource> inputStream, @Nullable Res
268273 });
269274 }
270275
276+ private static Mono <Void > handleInvalidRange (ServerHttpResponse response ) {
277+ response .setStatusCode (HttpStatus .REQUESTED_RANGE_NOT_SATISFIABLE );
278+ return response .setComplete ();
279+ }
280+
271281 private Mono <Void > writeSingleRegion (ResourceRegion region , ReactiveHttpOutputMessage message ,
272282 Map <String , Object > hints ) {
273283
0 commit comments