From 8ba60736376d36737918b11938566c483cfc8d7b Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 13 Jun 2023 11:37:07 -0500 Subject: [PATCH] fix(embedded): Extend sanitization rules to cover cargo-new validation --- src/cargo/ops/cargo_new.rs | 1 + src/cargo/util/toml/embedded.rs | 35 +++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/cargo/ops/cargo_new.rs b/src/cargo/ops/cargo_new.rs index ca1339afa17f..b113671b078e 100644 --- a/src/cargo/ops/cargo_new.rs +++ b/src/cargo/ops/cargo_new.rs @@ -163,6 +163,7 @@ fn get_name<'a>(path: &'a Path, opts: &'a NewOptions) -> CargoResult<&'a str> { }) } +/// See also `util::toml::embedded::sanitize_name` fn check_name( name: &str, show_name_help: bool, diff --git a/src/cargo/util/toml/embedded.rs b/src/cargo/util/toml/embedded.rs index 62da341f6847..6b594fa96616 100644 --- a/src/cargo/util/toml/embedded.rs +++ b/src/cargo/util/toml/embedded.rs @@ -87,7 +87,7 @@ fn write( // more common convention for CLIs '-' }; - let name = sanitize_package_name(file_name.as_ref(), separator); + let name = sanitize_name(file_name.as_ref(), separator); let mut workspace_root = target_dir.to_owned(); workspace_root.push("eval"); @@ -154,7 +154,7 @@ fn expand_manifest_(script: &RawScript, config: &Config) -> CargoResult CargoResult String { - restricted_names::sanitize_package_name(name, placeholder) +/// Ensure the package name matches the validation from `opt::cargo_new::check_name` +fn sanitize_name(name: &str, placeholder: char) -> String { + let mut name = restricted_names::sanitize_package_name(name, placeholder); + + loop { + if restricted_names::is_keyword(&name) { + name.push(placeholder); + } else if restricted_names::is_conflicting_artifact_name(&name) { + // Being an embedded manifest, we always assume it is a `[[bin]]` + name.push(placeholder); + } else if name == "test" { + name.push(placeholder); + } else if restricted_names::is_windows_reserved(&name) { + // Go ahead and be consistent across platforms + name.push(placeholder); + } else { + break; + } + } + + name } fn hash(script: &RawScript) -> blake3::Hash { @@ -442,12 +461,12 @@ mod test_expand { fn test_default() { snapbox::assert_eq( r#"[[bin]] -name = "test" +name = "test-" path = "/home/me/test.rs" [package] edition = "2021" -name = "test" +name = "test-" publish = false version = "0.0.0" @@ -464,7 +483,7 @@ strip = true fn test_dependencies() { snapbox::assert_eq( r#"[[bin]] -name = "test" +name = "test-" path = "/home/me/test.rs" [dependencies] @@ -472,7 +491,7 @@ time = "0.1.25" [package] edition = "2021" -name = "test" +name = "test-" publish = false version = "0.0.0"