From 139938a22e35febe8c346e255cb6e01e14e73999 Mon Sep 17 00:00:00 2001 From: Andrew Barnes Date: Sun, 12 Jul 2026 23:08:05 -0400 Subject: [PATCH] Reject unknown rust-toolchain keys --- src/config.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/config.rs b/src/config.rs index 84e267ea42..bf448d16a8 100644 --- a/src/config.rs +++ b/src/config.rs @@ -40,6 +40,7 @@ enum OverrideFileConfigError { } #[derive(Debug, Default, Deserialize, PartialEq, Eq)] +#[serde(deny_unknown_fields)] struct OverrideFile { toolchain: ToolchainSection, } @@ -51,6 +52,7 @@ impl OverrideFile { } #[derive(Debug, Default, Deserialize, PartialEq, Eq)] +#[serde(deny_unknown_fields)] struct ToolchainSection { channel: Option, path: Option, @@ -1413,4 +1415,27 @@ channel = nightly Ok(OverrideFileConfigError::Parsing) )); } + + #[test] + fn parse_toml_rejects_unknown_toolchain_key() { + let contents = r#"[toolchain] +channnel = "nightly" +"#; + + let error = Cfg::parse_override_file(contents, ParseMode::OnlyToml).unwrap_err(); + assert!(format!("{error:#}").contains("unknown field `channnel`")); + } + + #[test] + fn parse_toml_rejects_unknown_top_level_key() { + let contents = r#"[toolchain] +channel = "nightly" + +[rustup] +version = 4 +"#; + + let error = Cfg::parse_override_file(contents, ParseMode::OnlyToml).unwrap_err(); + assert!(format!("{error:#}").contains("unknown field `rustup`")); + } }