diff --git a/cli-plugins/socket/socket.go b/cli-plugins/socket/socket.go index 7096b42b2e94..9a76f7a7805c 100644 --- a/cli-plugins/socket/socket.go +++ b/cli-plugins/socket/socket.go @@ -95,6 +95,9 @@ func (pl *PluginServer) Addr() net.Addr { // // The error value is that of the underlying [net.Listner.Close] call. func (pl *PluginServer) Close() error { + if pl == nil { + return nil + } logrus.Trace("Closing plugin server") // Close connections first to ensure the connections get io.EOF instead // of a connection reset. diff --git a/cli-plugins/socket/socket_test.go b/cli-plugins/socket/socket_test.go index df7b35118139..7d786abfc6f9 100644 --- a/cli-plugins/socket/socket_test.go +++ b/cli-plugins/socket/socket_test.go @@ -117,6 +117,18 @@ func TestPluginServer(t *testing.T) { assert.NilError(t, err, "failed to dial returned server") checkDirNoNewPluginServer(t) }) + + t.Run("does not panic on Close if server is nil", func(t *testing.T) { + var srv *PluginServer + defer func() { + if r := recover(); r != nil { + t.Errorf("panicked on Close") + } + }() + + err := srv.Close() + assert.NilError(t, err) + }) } func checkDirNoNewPluginServer(t *testing.T) {