From a2f71ad44ce76042e644b4e05ac73427db2d2b46 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 8 Apr 2025 11:44:04 +0200 Subject: [PATCH] Reapply "blueprintload: enable strict checking for toml" This reverts commit f25b5e325eae1279a437219a0cbfc2635cbe0612. --- internal/blueprintload/blueprintload.go | 6 ++++-- internal/blueprintload/blueprintload_test.go | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/internal/blueprintload/blueprintload.go b/internal/blueprintload/blueprintload.go index 84de3db..068fec9 100644 --- a/internal/blueprintload/blueprintload.go +++ b/internal/blueprintload/blueprintload.go @@ -21,11 +21,13 @@ func decodeToml(r io.Reader, what string) (*externalBlueprint.Blueprint, error) dec := toml.NewDecoder(r) var conf externalBlueprint.Blueprint - _, err := dec.Decode(&conf) - + metadata, err := dec.Decode(&conf) if err != nil { return nil, fmt.Errorf("cannot decode %q: %w", what, err) } + if len(metadata.Undecoded()) > 0 { + return nil, fmt.Errorf("cannot decode %q: unknown keys found: %v", what, metadata.Undecoded()) + } return &conf, nil } diff --git a/internal/blueprintload/blueprintload_test.go b/internal/blueprintload/blueprintload_test.go index de7ad84..f3878cc 100644 --- a/internal/blueprintload/blueprintload_test.go +++ b/internal/blueprintload/blueprintload_test.go @@ -27,6 +27,17 @@ var testBlueprintTOML = ` name = "alice" ` +var testBlueprintJSONunknownKeys = ` +{ + "birds": {"name": "robin"} +} +` + +var testBlueprintTOMLunknownKeys = ` +[[birds]] +name = "robin" +` + var expectedBlueprint = &blueprint.Blueprint{ Customizations: &blueprint.Customizations{ User: []blueprint.UserCustomization{ @@ -55,9 +66,11 @@ func TestBlueprintLoadJSON(t *testing.T) { }{ {"bp.json", testBlueprintJSON, expectedBlueprint, ""}, {"bp.toml", testBlueprintTOML, expectedBlueprint, ""}, - {"bp.toml", "wrong-content", nil, `cannot decode .*/bp.toml": toml: `}, - {"bp.json", "wrong-content", nil, `cannot decode .*/bp.json": invalid `}, + {"bp.toml", "wrong-content", nil, `cannot decode ".*/bp.toml": toml: `}, + {"bp.json", "wrong-content", nil, `cannot decode ".*/bp.json": invalid `}, {"bp", "wrong-content", nil, `unsupported file extension for "/.*/bp"`}, + {"bp.toml", testBlueprintTOMLunknownKeys, nil, `cannot decode ".*/bp.toml": unknown keys found: \[birds birds.name\]`}, + {"bp.json", testBlueprintJSONunknownKeys, nil, `cannot decode ".*/bp.json": json: unknown field "birds"`}, } { blueprintPath := makeTestBlueprint(t, tc.fname, tc.content) bp, err := blueprintload.Load(blueprintPath)