From f8392362432ed4746265cd3de26cc7a849d37870 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 17 Mar 2026 19:20:24 -0700 Subject: [PATCH] Return empty body for empty/oversized range requests matching Go Go's ProcessRangeRequest returns nil (empty body, 200 OK) when parsed ranges are empty or combined range size exceeds total content size. The Rust buffered path incorrectly returned the full file data for both cases. The streaming path already handled this correctly. --- seaweed-volume/src/server/handlers.rs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/seaweed-volume/src/server/handlers.rs b/seaweed-volume/src/server/handlers.rs index ec41f33b4..aae4f9589 100644 --- a/seaweed-volume/src/server/handlers.rs +++ b/seaweed-volume/src/server/handlers.rs @@ -1418,21 +1418,13 @@ fn handle_range_request( Err(msg) => return range_error_response(headers, msg), }; + // Go's ProcessRangeRequest returns nil (empty body) for empty or oversized ranges if ranges.is_empty() { - headers.insert( - header::CONTENT_LENGTH, - data.len().to_string().parse().unwrap(), - ); - return finalize_bytes_response(StatusCode::OK, headers, data.to_vec(), state); + return (StatusCode::OK, headers).into_response(); } - // If combined range bytes exceed content size, ignore the range and return full data if sum_ranges_size(&ranges) > total { - headers.insert( - header::CONTENT_LENGTH, - data.len().to_string().parse().unwrap(), - ); - return finalize_bytes_response(StatusCode::OK, headers, data.to_vec(), state); + return (StatusCode::OK, headers).into_response(); } if ranges.len() == 1 {