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