From fca751c5007b1beed4ec982592fd1005f44119e7 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 17 Mar 2026 21:39:24 -0700 Subject: [PATCH] Return 400 on malformed query strings in PostHandler matching Go's ParseForm Go's r.ParseForm() returns HTTP 400 with "form parse error: ..." when the query string is malformed. Rust was silently falling back to empty query params via unwrap_or_default(). --- seaweed-volume/src/server/handlers.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/seaweed-volume/src/server/handlers.rs b/seaweed-volume/src/server/handlers.rs index 1308c47ea..3d9ea62ad 100644 --- a/seaweed-volume/src/server/handlers.rs +++ b/seaweed-volume/src/server/handlers.rs @@ -1813,8 +1813,17 @@ pub async fn post_handler( let query = request.uri().query().unwrap_or("").to_string(); let method = request.method().clone(); let headers = request.headers().clone(); - let query_fields: Vec<(String, String)> = - serde_urlencoded::from_str(&query).unwrap_or_default(); + let query_fields: Vec<(String, String)> = match serde_urlencoded::from_str(&query) { + Ok(fields) => fields, + Err(e) => { + // Go's r.ParseForm() returns 400 on malformed query strings + return json_error_with_query( + StatusCode::BAD_REQUEST, + &format!("form parse error: {}", e), + Some(&query), + ) + } + }; let (vid, needle_id, cookie) = match parse_url_path(&path) { Some(parsed) => parsed,