Skip to content

Commit

Permalink
Auto merge of #6761 - alexcrichton:handle-toml, r=ehuss
Browse files Browse the repository at this point in the history
Handle backcompat hazard with `toml` crate

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
bors committed Mar 19, 2019
2 parents 0643c49 + 111eaa1 commit 26d66b2
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 26d66b2

Please sign in to comment.