Skip to content

Commit

Permalink
Auto merge of #8939 - Andy-Python-Programmer:master, r=alexcrichton
Browse files Browse the repository at this point in the history
Throw error if CARGO_TARGET_DIR is an empty string

This pull request makes the target dir to be target/ if `CARGO_TARGET_DIR` is `` with spaces trimmed and not delete the current project.

Fixes: #8866
  • Loading branch information
bors committed Feb 25, 2021
2 parents 6780fbd + b5b2e48 commit f3e63d6
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 2 deletions.
18 changes: 16 additions & 2 deletions src/cargo/util/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -473,10 +473,24 @@ impl Config {
if let Some(dir) = &self.target_dir {
Ok(Some(dir.clone()))
} else if let Some(dir) = env::var_os("CARGO_TARGET_DIR") {
// Check if the CARGO_TARGET_DIR environment variable is set to an empty string.
if dir.to_string_lossy() == "" {
anyhow::bail!("the target directory is set to an empty string in the `CARGO_TARGET_DIR` environment variable")
}

Ok(Some(Filesystem::new(self.cwd.join(dir))))
} else if let Some(val) = &self.build_config()?.target_dir {
let val = val.resolve_path(self);
Ok(Some(Filesystem::new(val)))
let path = val.resolve_path(self);

// Check if the target directory is set to an empty string in the config.toml file.
if val.raw_value() == "" {
anyhow::bail!(format!(
"the target directory is set to an empty string in {}",
val.value().definition
),)
}

Ok(Some(Filesystem::new(path)))
} else {
Ok(None)
}
Expand Down
5 changes: 5 additions & 0 deletions src/cargo/util/config/path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ use std::path::PathBuf;
pub struct ConfigRelativePath(Value<String>);

impl ConfigRelativePath {
/// Returns the underlying value.
pub fn value(&self) -> &Value<String> {
&self.0
}

/// Returns the raw underlying configuration value for this key.
pub fn raw_value(&self) -> &str {
&self.0.val
Expand Down
28 changes: 28 additions & 0 deletions tests/testsuite/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1460,3 +1460,31 @@ strip = 'debuginfo'
let strip = p.strip.unwrap();
assert_eq!(strip, toml::StringOrBool::String("debuginfo".to_string()));
}

#[cargo_test]
fn cargo_target_empty_cfg() {
write_config(
"\
[build]
target-dir = ''
",
);

let config = new_config();

assert_error(
config.target_dir().unwrap_err(),
"the target directory is set to an empty string in [..]/.cargo/config",
);
}

#[cargo_test]
fn cargo_target_empty_env() {
let project = project().build();

project.cargo("build")
.env("CARGO_TARGET_DIR", "")
.with_stderr("error: the target directory is set to an empty string in the `CARGO_TARGET_DIR` environment variable")
.with_status(101)
.run()
}

0 comments on commit f3e63d6

Please sign in to comment.