diff options
author | Arun Raghavan <arun@asymptotic.io> | 2023-09-21 21:21:16 +0300 |
---|---|---|
committer | Arun Raghavan <arun@asymptotic.io> | 2023-10-24 19:52:12 +0300 |
commit | bb26e04a55e2ef139656adf35f24bf0a43404f93 (patch) | |
tree | 5374d76d68d118d3a60ba4d52dbb4fceabb5042f | |
parent | 51129febeb105b46f1cf8da6c57e4b4837743614 (diff) |
aws: s3: Properly percent-decode GstS3Url
We previously only percent-decoded the first fragment. This doesn't
necessarily harm anything, but for consistency we keep the structure
un-encoded, and encode when converting to a string representation.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1333>
-rw-r--r-- | net/aws/src/s3url.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/net/aws/src/s3url.rs b/net/aws/src/s3url.rs index 8d174d13..7a9d031f 100644 --- a/net/aws/src/s3url.rs +++ b/net/aws/src/s3url.rs @@ -83,15 +83,21 @@ pub fn parse_s3_url(url_str: &str) -> Result<GstS3Url, String> { .next() .ok_or_else(|| format!("Invalid empty object/bucket '{url}'"))?; + if o.is_empty() { + return Err(format!("Invalid empty object/bucket '{url}'")); + } + let mut object = percent_decode(o.as_bytes()) .decode_utf8() .unwrap() .to_string(); - if o.is_empty() { - return Err(format!("Invalid empty object/bucket '{url}'")); - } - object = path.fold(object, |o, p| format!("{o}/{p}")); + object = path.fold(object, |o, p| { + format!( + "{o}/{}", + percent_decode(p.as_bytes()).decode_utf8().unwrap() + ) + }); let mut q = url.query_pairs(); let v = q.next(); |