Skip to content

Commit f4abdbe

Browse files
committed
fix(embedded): Extend sanitization rules to cover cargo-new validation
1 parent 8186282 commit f4abdbe

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

src/cargo/ops/cargo_new.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ fn get_name<'a>(path: &'a Path, opts: &'a NewOptions) -> CargoResult<&'a str> {
163163
})
164164
}
165165

166+
/// See also `util::toml::embedded::sanitize_name`
166167
fn check_name(
167168
name: &str,
168169
show_name_help: bool,

src/cargo/util/toml/embedded.rs

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ fn write(
8787
// more common convention for CLIs
8888
'-'
8989
};
90-
let name = sanitize_package_name(file_name.as_ref(), separator);
90+
let name = sanitize_name(file_name.as_ref(), separator);
9191

9292
let mut workspace_root = target_dir.to_owned();
9393
workspace_root.push("eval");
@@ -154,7 +154,7 @@ fn expand_manifest_(script: &RawScript, config: &Config) -> CargoResult<toml::Ta
154154
// more common convention for CLIs
155155
'-'
156156
};
157-
let name = sanitize_package_name(file_name.as_ref(), separator);
157+
let name = sanitize_name(file_name.as_ref(), separator);
158158
let bin_name = name.clone();
159159
package
160160
.entry("name".to_owned())
@@ -206,8 +206,27 @@ fn expand_manifest_(script: &RawScript, config: &Config) -> CargoResult<toml::Ta
206206
Ok(manifest)
207207
}
208208

209-
fn sanitize_package_name(name: &str, placeholder: char) -> String {
210-
restricted_names::sanitize_package_name(name, placeholder)
209+
/// Ensure the package name matches the validation from `ops::cargo_new::check_name`
210+
fn sanitize_name(name: &str, placeholder: char) -> String {
211+
let mut name = restricted_names::sanitize_package_name(name, placeholder);
212+
213+
loop {
214+
if restricted_names::is_keyword(&name) {
215+
name.push(placeholder);
216+
} else if restricted_names::is_conflicting_artifact_name(&name) {
217+
// Being an embedded manifest, we always assume it is a `[[bin]]`
218+
name.push(placeholder);
219+
} else if name == "test" {
220+
name.push(placeholder);
221+
} else if restricted_names::is_windows_reserved(&name) {
222+
// Go ahead and be consistent across platforms
223+
name.push(placeholder);
224+
} else {
225+
break;
226+
}
227+
}
228+
229+
name
211230
}
212231

213232
fn hash(script: &RawScript) -> blake3::Hash {
@@ -442,12 +461,12 @@ mod test_expand {
442461
fn test_default() {
443462
snapbox::assert_eq(
444463
r#"[[bin]]
445-
name = "test"
464+
name = "test-"
446465
path = "/home/me/test.rs"
447466
448467
[package]
449468
edition = "2021"
450-
name = "test"
469+
name = "test-"
451470
publish = false
452471
version = "0.0.0"
453472
@@ -464,15 +483,15 @@ strip = true
464483
fn test_dependencies() {
465484
snapbox::assert_eq(
466485
r#"[[bin]]
467-
name = "test"
486+
name = "test-"
468487
path = "/home/me/test.rs"
469488
470489
[dependencies]
471490
time = "0.1.25"
472491
473492
[package]
474493
edition = "2021"
475-
name = "test"
494+
name = "test-"
476495
publish = false
477496
version = "0.0.0"
478497

0 commit comments

Comments
 (0)