From 1579362c4f26671535a57d3f1922fc54f1b5459b Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 17 Mar 2026 19:01:26 -0700 Subject: [PATCH] Check gzip magic bytes before setting Content-Encoding matching Go Go checks both Accept-Encoding contains "gzip" AND IsGzippedContent (data starts with 0x1f 0x8b) before setting Content-Encoding: gzip. Rust only checked Accept-Encoding, which could incorrectly declare gzip encoding for non-gzip compressed data. --- seaweed-volume/src/server/handlers.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/seaweed-volume/src/server/handlers.rs b/seaweed-volume/src/server/handlers.rs index c009f1efe..682b1a8a9 100644 --- a/seaweed-volume/src/server/handlers.rs +++ b/seaweed-volume/src/server/handlers.rs @@ -1266,7 +1266,13 @@ async fn get_or_head_handler_inner( .get(header::ACCEPT_ENCODING) .and_then(|v| v.to_str().ok()) .unwrap_or(""); - if accept_encoding.contains("gzip") { + if accept_encoding.contains("gzip") + && data.len() >= 2 + && data[0] == 0x1f + && data[1] == 0x8b + { + // Go checks IsGzippedContent (magic bytes 0x1f 0x8b) before + // setting Content-Encoding: gzip response_headers.insert(header::CONTENT_ENCODING, "gzip".parse().unwrap()); } else { // Decompress for client