diff --git a/internal/config/plugin_manager.go b/internal/config/plugin_manager.go index 1c5bfd8bd2..2b12167947 100644 --- a/internal/config/plugin_manager.go +++ b/internal/config/plugin_manager.go @@ -38,6 +38,9 @@ func NewPluginInfo(data []byte) (*PluginInfo, error) { if err := json5.Unmarshal(data, &info); err != nil { return nil, err } + if len(info) == 0 || info[0].Name == "" { + return nil, ErrMissingName + } return &info[0], nil } diff --git a/internal/config/plugin_manager_test.go b/internal/config/plugin_manager_test.go index f360469a04..ad26bee400 100644 --- a/internal/config/plugin_manager_test.go +++ b/internal/config/plugin_manager_test.go @@ -21,3 +21,11 @@ func TestNewPluginInfoAllowsJSON5Comments(t *testing.T) { t.Fatalf("expected plugin name %q, got %q", "example", info.Name) } } + +func TestNewPluginInfoRejectsMissingName(t *testing.T) { + for _, data := range []string{`[]`, `null`, `[{}]`, `[{"Description": "no name"}]`} { + if info, err := NewPluginInfo([]byte(data)); err != ErrMissingName { + t.Errorf("NewPluginInfo(%s) = %v, %v; want ErrMissingName", data, info, err) + } + } +}