diff options
author | Alex Auvolat <lx@deuxfleurs.fr> | 2025-01-27 19:58:06 +0100 |
---|---|---|
committer | Alex Auvolat <lx@deuxfleurs.fr> | 2025-01-27 19:58:06 +0100 |
commit | e8fa89e8348522c368eb17e89ab3209e6a734088 (patch) | |
tree | 7dc587d54a6511ab99f3a681f5c5ab9bf9008bd7 /src/api/s3 | |
parent | d4e3e609209eb52d820338daf628df7cf09881ab (diff) | |
download | garage-e8fa89e8348522c368eb17e89ab3209e6a734088.tar.gz garage-e8fa89e8348522c368eb17e89ab3209e6a734088.zip |
s3 api: make x-amz-meta-* headers lowercase (fix #844)fix-844
Diffstat (limited to 'src/api/s3')
-rw-r--r-- | src/api/s3/get.rs | 13 | ||||
-rw-r--r-- | src/api/s3/put.rs | 2 |
2 files changed, 6 insertions, 9 deletions
diff --git a/src/api/s3/get.rs b/src/api/s3/get.rs index f5d3cf11..f61aae11 100644 --- a/src/api/s3/get.rs +++ b/src/api/s3/get.rs @@ -68,14 +68,11 @@ fn object_headers( // See: https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html let mut headers_by_name = BTreeMap::new(); for (name, value) in meta_inner.headers.iter() { - match headers_by_name.get_mut(name) { - None => { - headers_by_name.insert(name, vec![value.as_str()]); - } - Some(headers) => { - headers.push(value.as_str()); - } - } + let name_lower = name.to_ascii_lowercase(); + headers_by_name + .entry(name_lower) + .or_insert(vec![]) + .push(value.as_str()); } for (name, values) in headers_by_name { diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index 1e3b1b44..bfb0dc9b 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -622,7 +622,7 @@ pub(crate) fn get_headers(headers: &HeaderMap<HeaderValue>) -> Result<HeaderList for (name, value) in headers.iter() { if name.as_str().starts_with("x-amz-meta-") { ret.push(( - name.to_string(), + name.as_str().to_ascii_lowercase(), std::str::from_utf8(value.as_bytes())?.to_string(), )); } |