duplicate top-level keys test
diff --git a/src/client.rs b/src/client.rs
index c3fd668..017d143 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -37,7 +37,12 @@
//! Some("rustup/1.4.0".into()),
//! None);
//!
-//! let mut client = Client::with_root_pinned(&key_ids, Config::default(), local, remote).unwrap();
+//! let mut client = Client::with_root_pinned(
+//! &key_ids,
+//! Config::default(),
+//! local,
+//! remote,
+//! ).unwrap();
//! let _ = client.update_local().unwrap();
//! let _ = client.update_remote().unwrap();
//! }
diff --git a/src/metadata.rs b/src/metadata.rs
index e0599c3..5bcee7c 100644
--- a/src/metadata.rs
+++ b/src/metadata.rs
@@ -1994,6 +1994,30 @@
assert!(json::from_value::<RootMetadata>(root_json).is_err());
}
+ // Refuse to deserialize root metadata if it contains duplicate keys
+ #[test]
+ fn deserialize_json_root_duplicate_keys() {
+ let mut root_json = make_root();
+ let dupe = root_json
+ .as_object()
+ .unwrap()
+ .get("keys")
+ .unwrap()
+ .as_array()
+ .unwrap()
+ [0]
+ .clone();
+ root_json
+ .as_object_mut()
+ .unwrap()
+ .get_mut("keys")
+ .unwrap()
+ .as_array_mut()
+ .unwrap()
+ .push(dupe);
+ assert!(json::from_value::<RootMetadata>(root_json).is_err());
+ }
+
fn set_threshold(value: &mut json::Value, threshold: i32) {
match value.as_object_mut() {
Some(obj) => {