diff options
author | Alex Auvolat <alex@adnab.me> | 2020-04-24 18:56:00 +0000 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2020-04-24 18:56:00 +0000 |
commit | a52db679544d3777d7f33bd1f22bc965a9d79bb1 (patch) | |
tree | ffe77509f039677eeff1a306d1b23ffcffb7ad99 | |
parent | 91b2d1fcc11c181b1b69db9157188ec39768b5ba (diff) | |
download | garage-a52db679544d3777d7f33bd1f22bc965a9d79bb1.tar.gz garage-a52db679544d3777d7f33bd1f22bc965a9d79bb1.zip |
xml escape
-rw-r--r-- | src/api/s3_list.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/api/s3_list.rs b/src/api/s3_list.rs index 6004bff0..8b4703df 100644 --- a/src/api/s3_list.rs +++ b/src/api/s3_list.rs @@ -2,7 +2,7 @@ use std::collections::BTreeMap; use std::fmt::Write; use std::sync::Arc; -use chrono::{DateTime, NaiveDateTime, Utc, SecondsFormat}; +use chrono::{DateTime, NaiveDateTime, SecondsFormat, Utc}; use hyper::Response; use garage_util::error::Error; @@ -99,7 +99,7 @@ pub async fn handle_list( let last_modif = DateTime::<Utc>::from_utc(last_modif, Utc); let last_modif = last_modif.to_rfc3339_opts(SecondsFormat::Millis, true); writeln!(&mut xml, "\t<Contents>").unwrap(); - writeln!(&mut xml, "\t\t<Key>{}</Key>", key).unwrap(); + writeln!(&mut xml, "\t\t<Key>{}</Key>", xml_escape(key)).unwrap(); writeln!(&mut xml, "\t\t<LastModified>{}</LastModified>", last_modif).unwrap(); writeln!(&mut xml, "\t\t<Size>{}</Size>", info.size).unwrap(); writeln!(&mut xml, "\t\t<StorageClass>STANDARD</StorageClass>").unwrap(); @@ -110,3 +110,9 @@ pub async fn handle_list( Ok(Response::new(Box::new(BytesBody::from(xml.into_bytes())))) } + +fn xml_escape(s: &str) -> String { + s.replace("<", "<") + .replace(">", ">") + .replace("\"", """) +} |