diff --git a/ipn/message.go b/ipn/message.go index d8b7d1396..fb5638eca 100644 --- a/ipn/message.go +++ b/ipn/message.go @@ -104,7 +104,9 @@ func NewBackendServer(logf logger.Logf, b Backend, sendNotifyMsg func(Notify)) * b: b, sendNotifyMsg: sendNotifyMsg, } - if sendNotifyMsg != nil { + // b may be nil if the BackendServer is being created just to + // encapsulate and send an error message. + if sendNotifyMsg != nil && b != nil { b.SetNotifyCallback(bs.send) } return bs diff --git a/ipn/message_test.go b/ipn/message_test.go index 79c4a76b6..194ac3b89 100644 --- a/ipn/message_test.go +++ b/ipn/message_test.go @@ -187,3 +187,17 @@ func TestClientServer(t *testing.T) { }) flushUntil(Running) } + +func TestNilBackend(t *testing.T) { + var called *Notify + bs := NewBackendServer(t.Logf, nil, func(n Notify) { + called = &n + }) + bs.SendErrorMessage("Danger, Will Robinson!") + if called == nil { + t.Errorf("expect callback to be called, wasn't") + } + if called.ErrMessage == nil || *called.ErrMessage != "Danger, Will Robinson!" { + t.Errorf("callback got wrong error: %v", called.ErrMessage) + } +}