diff --git a/src/bin/cargo/commands/install.rs b/src/bin/cargo/commands/install.rs index cd946c9b378..cab154af740 100644 --- a/src/bin/cargo/commands/install.rs +++ b/src/bin/cargo/commands/install.rs @@ -167,6 +167,12 @@ pub fn exec(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult { .into()); } } + + if crate_name != "." + && let Err(e) = package_name + { + return Err(anyhow::format_err!("{e}").into()); + } } let mut from_cwd = false; diff --git a/tests/testsuite/install.rs b/tests/testsuite/install.rs index 2cb55a428e9..5791b9aa9b8 100644 --- a/tests/testsuite/install.rs +++ b/tests/testsuite/install.rs @@ -3068,3 +3068,42 @@ For more information, try '--help'. "#]]) .run(); } + +#[cargo_test] +fn emoji_name() { + pkg("foo", "0.0.1"); + cargo_process("install 🦀") + .with_status(101) + .with_stdout_data("") + .with_stderr_data(str![[r#" +[ERROR] invalid character `🦀` in package name: `🦀`, the first character must be a Unicode XID start character (most letters or `_`) + +"#]]) + .run(); +} + +#[cargo_test] +fn starts_with_number_case() { + pkg("foo", "0.0.1"); + cargo_process("install 23898932983") + .with_status(101) + .with_stdout_data("") + .with_stderr_data(str![[r#" +[ERROR] invalid character `2` in package name: `23898932983`, the name cannot start with a digit + +"#]]) + .run(); +} + +#[cargo_test] +fn mistaken_flag_case() { + pkg("foo", "0.0.1"); + cargo_process("install ––path .") // en dashes + .with_status(101) + .with_stdout_data("") + .with_stderr_data(str![[r#" +[ERROR] invalid character `–` in package name: `––path`, the first character must be a Unicode XID start character (most letters or `_`) + +"#]]) + .run(); +}