diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 4285a0c7f..cead7e0b1 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -6578,7 +6578,7 @@ func fillAllowedSuggestions() set.Set[tailcfg.StableNodeID] { } func suggestExitNode(report *netcheck.Report, netMap *netmap.NetworkMap, prevSuggestion tailcfg.StableNodeID, selectRegion selectRegionFunc, selectNode selectNodeFunc, allowList set.Set[tailcfg.StableNodeID]) (res apitype.ExitNodeSuggestionResponse, err error) { - if report.PreferredDERP == 0 || netMap == nil || netMap.DERPMap == nil { + if report == nil || report.PreferredDERP == 0 || netMap == nil || netMap.DERPMap == nil { return res, ErrNoPreferredDERP } candidates := make([]tailcfg.NodeView, 0, len(netMap.Peers)) diff --git a/ipn/ipnlocal/local_test.go b/ipn/ipnlocal/local_test.go index a42162e6d..9139cb88c 100644 --- a/ipn/ipnlocal/local_test.go +++ b/ipn/ipnlocal/local_test.go @@ -3118,6 +3118,12 @@ func TestSuggestExitNode(t *testing.T) { DERPMap: defaultDERPMap, }, }, + { + name: "nil report", + lastReport: nil, + netMap: largeNetmap, + wantError: ErrNoPreferredDERP, + }, { name: "no preferred derp region", lastReport: preferredNoneReport, @@ -3127,6 +3133,24 @@ func TestSuggestExitNode(t *testing.T) { }, wantError: ErrNoPreferredDERP, }, + { + name: "nil netmap", + lastReport: noLatency1Report, + netMap: nil, + wantError: ErrNoPreferredDERP, + }, + { + name: "nil derpmap", + lastReport: noLatency1Report, + netMap: &netmap.NetworkMap{ + SelfNode: selfNode.View(), + DERPMap: nil, + Peers: []tailcfg.NodeView{ + dallasPeer5, + }, + }, + wantError: ErrNoPreferredDERP, + }, { name: "missing suggestion capability", lastReport: noLatency1Report,