feat(rust-volume-server): broaden native slash fid-path validation

This commit is contained in:
Chris Lu
2026-02-16 05:06:21 -08:00
parent b010af88fb
commit e66983e9bd
+14 -4
View File
@@ -685,6 +685,10 @@ fn normalize_request_path(target: &str) -> String {
}
fn extract_fid_route_parts(path: &str) -> Option<(String, String)> {
if is_non_fid_reserved_path(path) {
return None;
}
let trimmed = path.trim_start_matches('/');
if trimmed.is_empty() {
return None;
@@ -698,10 +702,7 @@ fn extract_fid_route_parts(path: &str) -> Option<(String, String)> {
return None;
}
if (segments.len() == 2 || segments.len() == 3)
&& !segments[0].is_empty()
&& segments[0].bytes().all(|b| b.is_ascii_digit())
{
if (segments.len() == 2 || segments.len() == 3) && !segments[0].is_empty() {
let fid = if segments.len() == 2 {
strip_optional_extension(segments[1])
} else {
@@ -713,6 +714,15 @@ fn extract_fid_route_parts(path: &str) -> Option<(String, String)> {
None
}
fn is_non_fid_reserved_path(path: &str) -> bool {
path == "/status"
|| path == "/healthz"
|| path == "/favicon.ico"
|| path == "/ui/index.html"
|| path.starts_with("/seaweedfsstatic/")
|| path.starts_with("/stats/")
}
fn strip_optional_extension(token: &str) -> String {
if let Some((base, _)) = token.rsplit_once('.') {
if !base.is_empty() {