Skip to content

Commit

Permalink
Handle backcompat hazard with toml crate
Browse files Browse the repository at this point in the history
The 0.5.0 release contained a
[bugfix](toml-rs/toml-rs#280) which
previously successfully parsed invalid TOML files, so we'll need to
manually handle that in Cago to ensure that we don't accidentally
regress crates, but rather instead give them an appropriate amount of
time to get fixed.
  • Loading branch information
alexcrichton committed Mar 18, 2019
1 parent d071687 commit 111eaa1
Showing 1 changed file with 18 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/cargo/util/toml/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,24 @@ in the future.",
return Ok(ret);
}

let mut third_parser = toml::de::Deserializer::new(toml);
third_parser.set_allow_duplicate_after_longer_table(true);
if let Ok(ret) = toml::Value::deserialize(&mut third_parser) {
let msg = format!(
"\
TOML file found which contains invalid syntax and will soon not parse
at `{}`.
The TOML spec requires that each table header is defined at most once, but
historical versions of Cargo have erroneously accepted this file. The table
definitions will need to be merged together with one table header to proceed,
and this will become a hard error in the future.",
file.display()
);
config.shell().warn(&msg)?;
return Ok(ret);
}

let first_error = failure::Error::from(first_error);
Err(first_error.context("could not parse input as TOML").into())
}
Expand Down

0 comments on commit 111eaa1

Please sign in to comment.