Skip to content

Commit 8e0e68e

Browse files
committed
Avoid collect args from `env::args in proxy mode
cargo in fix-proxy-mode might read `@path` argfile as what rustc does. Therefore, we should collect info from `ProcessBuilder::get_args()`.
1 parent 877c0ad commit 8e0e68e

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

src/cargo/ops/fix.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,18 @@ pub fn fix_maybe_exec_rustc(config: &Config) -> CargoResult<bool> {
405405
paths::write(path, &file.original_code)?;
406406
}
407407
}
408-
log_failed_fix(&output.stderr, output.status)?;
408+
409+
let krate = {
410+
let mut iter = json_error_rustc.get_args();
411+
let mut krate = None;
412+
while let Some(arg) = iter.next() {
413+
if arg == "--crate-name" {
414+
krate = iter.next().and_then(|s| s.to_owned().into_string().ok());
415+
}
416+
}
417+
krate
418+
};
419+
log_failed_fix(krate, &output.stderr, output.status)?;
409420
}
410421
}
411422

@@ -695,7 +706,7 @@ fn exit_with(status: ExitStatus) -> ! {
695706
process::exit(status.code().unwrap_or(3));
696707
}
697708

698-
fn log_failed_fix(stderr: &[u8], status: ExitStatus) -> CargoResult<()> {
709+
fn log_failed_fix(krate: Option<String>, stderr: &[u8], status: ExitStatus) -> CargoResult<()> {
699710
let stderr = str::from_utf8(stderr).context("failed to parse rustc stderr as utf-8")?;
700711

701712
let diagnostics = stderr
@@ -717,19 +728,6 @@ fn log_failed_fix(stderr: &[u8], status: ExitStatus) -> CargoResult<()> {
717728
.filter(|x| !x.starts_with('{'))
718729
.map(|x| x.to_string()),
719730
);
720-
let mut krate = None;
721-
let mut prev_dash_dash_krate_name = false;
722-
for arg in env::args() {
723-
if prev_dash_dash_krate_name {
724-
krate = Some(arg.clone());
725-
}
726-
727-
if arg == "--crate-name" {
728-
prev_dash_dash_krate_name = true;
729-
} else {
730-
prev_dash_dash_krate_name = false;
731-
}
732-
}
733731

734732
let files = files.into_iter().collect();
735733
let abnormal_exit = if status.code().map_or(false, is_simple_exit_code) {

0 commit comments

Comments
 (0)