diff --git a/src/cargo/ops/cargo_package.rs b/src/cargo/ops/cargo_package.rs index 742e68bc7eb..6b4dd2c2975 100644 --- a/src/cargo/ops/cargo_package.rs +++ b/src/cargo/ops/cargo_package.rs @@ -36,6 +36,7 @@ pub struct PackageOpts<'cfg> { pub cli_features: CliFeatures, } +const ORIGINAL_MANIFEST_FILE: &str = "Cargo.toml.orig"; const VCS_INFO_FILE: &str = ".cargo_vcs_info.json"; struct ArchiveFile { @@ -219,8 +220,8 @@ fn build_ar_list( match rel_str.as_ref() { "Cargo.toml" => { result.push(ArchiveFile { - rel_path: PathBuf::from("Cargo.toml.orig"), - rel_str: "Cargo.toml.orig".to_string(), + rel_path: PathBuf::from(ORIGINAL_MANIFEST_FILE), + rel_str: ORIGINAL_MANIFEST_FILE.to_string(), contents: FileContents::OnDisk(src_file), }); result.push(ArchiveFile { @@ -230,10 +231,9 @@ fn build_ar_list( }); } "Cargo.lock" => continue, - VCS_INFO_FILE => anyhow::bail!( - "invalid inclusion of reserved file name \ - {} in package source", - VCS_INFO_FILE + VCS_INFO_FILE | ORIGINAL_MANIFEST_FILE => anyhow::bail!( + "invalid inclusion of reserved file name {} in package source", + rel_str ), _ => { result.push(ArchiveFile { diff --git a/tests/testsuite/package.rs b/tests/testsuite/package.rs index fb917d5f3a8..378b8dd9112 100644 --- a/tests/testsuite/package.rs +++ b/tests/testsuite/package.rs @@ -283,6 +283,45 @@ in package source .run(); } +#[cargo_test] +fn orig_file_collision() { + let p = project().build(); + let _ = git::repo(&paths::root().join("foo")) + .file( + "Cargo.toml", + r#" + [project] + name = "foo" + description = "foo" + version = "0.0.1" + authors = [] + license = "MIT" + documentation = "foo" + homepage = "foo" + repository = "foo" + exclude = ["*.no-existe"] + "#, + ) + .file( + "src/main.rs", + r#" + fn main() {} + "#, + ) + .file("Cargo.toml.orig", "oops") + .build(); + p.cargo("package") + .arg("--no-verify") + .with_status(101) + .with_stderr( + "\ +[ERROR] invalid inclusion of reserved file name Cargo.toml.orig \ +in package source +", + ) + .run(); +} + #[cargo_test] fn path_dependency_no_version() { let p = project()