From 189a42aa40a1525ce451b58346f4d3774b3caa5e Mon Sep 17 00:00:00 2001 From: rwxrob Date: Tue, 16 Nov 2021 19:51:35 -0500 Subject: [PATCH] Trap nil pointer errors gracefully in plugin closes #10352 Signed-off-by: rwxrob --- pkg/plugin/plugin.go | 6 ++++++ pkg/plugin/plugin_test.go | 12 ++++++++++++ .../testdata/plugdir/bad/empty-plugin/plugin.yaml | 0 3 files changed, 18 insertions(+) create mode 100644 pkg/plugin/testdata/plugdir/bad/empty-plugin/plugin.yaml diff --git a/pkg/plugin/plugin.go b/pkg/plugin/plugin.go index 1399b7116..989e44db2 100644 --- a/pkg/plugin/plugin.go +++ b/pkg/plugin/plugin.go @@ -173,6 +173,12 @@ var validPluginName = regexp.MustCompile("^[A-Za-z0-9_-]+$") // validatePluginData validates a plugin's YAML data. func validatePluginData(plug *Plugin, filepath string) error { + if plug == nil { + return fmt.Errorf("nil plugin value detected") + } + if plug.Metadata == nil { + return fmt.Errorf("nil plugin Metadata detected") + } if !validPluginName.MatchString(plug.Metadata.Name) { return fmt.Errorf("invalid plugin name at %q", filepath) } diff --git a/pkg/plugin/plugin_test.go b/pkg/plugin/plugin_test.go index 2bbdff21d..bbc7a3736 100644 --- a/pkg/plugin/plugin_test.go +++ b/pkg/plugin/plugin_test.go @@ -350,6 +350,18 @@ func TestValidatePluginData(t *testing.T) { } } +func TestValidatePluginData_Empty_Plugin(t *testing.T) { + err := validatePluginData(nil, "") + if err == nil { + t.Error("should have trapped nil pointer for empty plugin") + } + p := new(Plugin) + err = validatePluginData(p, "") + if err == nil { + t.Error("should have trapped nil plugin metadata") + } +} + func TestDetectDuplicates(t *testing.T) { plugs := []*Plugin{ mockPlugin("foo"), diff --git a/pkg/plugin/testdata/plugdir/bad/empty-plugin/plugin.yaml b/pkg/plugin/testdata/plugdir/bad/empty-plugin/plugin.yaml new file mode 100644 index 000000000..e69de29bb