Skip to content

Commit

Permalink
fix(cli/installer): percent decode name (denoland#21392)
Browse files Browse the repository at this point in the history
  • Loading branch information
crowlKats committed Dec 2, 2023
1 parent d2b5254 commit 61a4e88
Showing 1 changed file with 26 additions and 8 deletions.
34 changes: 26 additions & 8 deletions cli/tools/installer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,14 +152,21 @@ pub async fn infer_name_from_url(url: &Url) -> Option<String> {
return None;
}

let path = PathBuf::from(url.path());
let mut stem = match path.file_stem() {
Some(stem) => stem.to_string_lossy().to_string(),
None => return None,
let percent_decode = percent_encoding::percent_decode(url.path().as_bytes());
#[cfg(unix)]
let path = {
use std::os::unix::prelude::OsStringExt;
PathBuf::from(std::ffi::OsString::from_vec(
percent_decode.collect::<Vec<u8>>(),
))
};
if stem == "main" || stem == "mod" || stem == "index" || stem == "cli" {
#[cfg(windows)]
let path = PathBuf::from(percent_decode.decode_utf8_lossy().as_ref());

let mut stem = path.file_stem()?.to_string_lossy();
if matches!(stem.as_ref(), "main" | "mod" | "index" | "cli") {
if let Some(parent_name) = path.parent().and_then(|p| p.file_name()) {
stem = parent_name.to_string_lossy().to_string();
stem = parent_name.to_string_lossy();
}
}

Expand All @@ -168,12 +175,12 @@ pub async fn infer_name_from_url(url: &Url) -> Option<String> {
// a version number.
match stem.find('@') {
Some(at_index) if at_index > 0 => {
stem = stem.split_at(at_index).0.to_string();
stem = stem.split_at(at_index).0.to_string().into();
}
_ => {}
}

Some(stem)
Some(stem.to_string())
}

pub fn uninstall(name: String, root: Option<String>) -> Result<(), AnyError> {
Expand Down Expand Up @@ -521,6 +528,13 @@ mod tests {
.await,
Some("abc".to_string())
);
assert_eq!(
infer_name_from_url(
&Url::parse("https://example.com/ab%20c/mod.ts").unwrap()
)
.await,
Some("ab c".to_string())
);
assert_eq!(
infer_name_from_url(
&Url::parse("https://example.com/abc/index.ts").unwrap()
Expand Down Expand Up @@ -552,6 +566,10 @@ mod tests {
infer_name_from_url(&Url::parse("file:https:///abc/main.ts").unwrap()).await,
Some("abc".to_string())
);
assert_eq!(
infer_name_from_url(&Url::parse("file:https:///ab%20c/main.ts").unwrap()).await,
Some("ab c".to_string())
);
assert_eq!(
infer_name_from_url(&Url::parse("file:https:///main.ts").unwrap()).await,
Some("main".to_string())
Expand Down

0 comments on commit 61a4e88

Please sign in to comment.