From fdcddbe168f5faa89e1da22051aa5b58f85038f2 Mon Sep 17 00:00:00 2001 From: Jill Date: Mon, 17 Jan 2022 11:18:40 +0100 Subject: [PATCH] Fix Multipart Upload with WinSCP (#164) (#193) Closes #164. Reviewed-on: https://git.deuxfleurs.fr/Deuxfleurs/garage/pulls/193 Co-authored-by: Jill Co-committed-by: Jill --- src/api/s3_put.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/api/s3_put.rs b/src/api/s3_put.rs index 4e85664b..a3ae290d 100644 --- a/src/api/s3_put.rs +++ b/src/api/s3_put.rs @@ -511,7 +511,7 @@ pub async fn handle_complete_multipart_upload( } let body_xml = roxmltree::Document::parse(std::str::from_utf8(&body)?)?; - let body_list_of_parts = parse_complete_multpart_upload_body(&body_xml) + let body_list_of_parts = parse_complete_multipart_upload_body(&body_xml) .ok_or_bad_request("Invalid CompleteMultipartUpload XML")?; debug!( "CompleteMultipartUpload list of parts: {:?}", @@ -703,7 +703,7 @@ struct CompleteMultipartUploadPart { part_number: u64, } -fn parse_complete_multpart_upload_body( +fn parse_complete_multipart_upload_body( xml: &roxmltree::Document, ) -> Option> { let mut parts = vec![]; @@ -715,6 +715,11 @@ fn parse_complete_multpart_upload_body( } for item in cmu.children() { + // Only parse nodes + if !item.is_element() { + continue; + } + if item.has_tag_name("Part") { let etag = item.children().find(|e| e.has_tag_name("ETag"))?.text()?; let part_number = item