From 7ee1c1b4798f18135ee618e30ccedfdf1f365451 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 7 Jan 2019 09:06:04 -0800 Subject: Fix disallowing duplicate table headers This commit fixes #279 where a case of duplicate table headers slipped through the cracks. This also adds an option to disable this new validation to allow Cargo to preserve backwards compatibility. --- test-suite/tests/backcompat.rs | 24 +++++++++++++++++++++++- test-suite/tests/invalid.rs | 2 ++ test-suite/tests/invalid/duplicate-table.toml | 8 ++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 test-suite/tests/invalid/duplicate-table.toml (limited to 'test-suite') diff --git a/test-suite/tests/backcompat.rs b/test-suite/tests/backcompat.rs index 1b3f599..e06eefc 100644 --- a/test-suite/tests/backcompat.rs +++ b/test-suite/tests/backcompat.rs @@ -4,7 +4,7 @@ extern crate serde; use serde::de::Deserialize; #[test] -fn main() { +fn newlines_after_tables() { let s = " [a] foo = 1 [[b]] foo = 1 @@ -17,3 +17,25 @@ fn main() { assert_eq!(value["a"]["foo"].as_integer(), Some(1)); assert_eq!(value["b"][0]["foo"].as_integer(), Some(1)); } + +#[test] +fn allow_duplicate_after_longer() { + let s = " + [dependencies.openssl-sys] + version = 1 + + [dependencies] + libc = 1 + + [dependencies] + bitflags = 1 + "; + assert!(s.parse::().is_err()); + + let mut d = toml::de::Deserializer::new(s); + d.set_allow_duplicate_after_longer_table(true); + let value = toml::Value::deserialize(&mut d).unwrap(); + assert_eq!(value["dependencies"]["openssl-sys"]["version"].as_integer(), Some(1)); + assert_eq!(value["dependencies"]["libc"].as_integer(), Some(1)); + assert_eq!(value["dependencies"]["bitflags"].as_integer(), Some(1)); +} diff --git a/test-suite/tests/invalid.rs b/test-suite/tests/invalid.rs index 4679684..9f36e2c 100644 --- a/test-suite/tests/invalid.rs +++ b/test-suite/tests/invalid.rs @@ -96,3 +96,5 @@ test!(text_before_array_separator, include_str!("invalid/text-before-array-separator.toml")); test!(text_in_array, include_str!("invalid/text-in-array.toml")); +test!(duplicate_table, + include_str!("invalid/duplicate-table.toml")); diff --git a/test-suite/tests/invalid/duplicate-table.toml b/test-suite/tests/invalid/duplicate-table.toml new file mode 100644 index 0000000..5bd2571 --- /dev/null +++ b/test-suite/tests/invalid/duplicate-table.toml @@ -0,0 +1,8 @@ +[dependencies.openssl-sys] +version = "0.5.2" + +[dependencies] +libc = "0.1" + +[dependencies] +bitflags = "0.1.1" -- cgit v1.2.3