diff options
| author | Adrian Dewhurst <adrian@tailscale.com> | 2024-03-20 11:31:31 -0400 |
|---|---|---|
| committer | Adrian Dewhurst <sailor@sailorfrag.net> | 2024-03-20 15:42:44 -0400 |
| commit | 2f7e7be2ea98c249dcdecf761ec85359a2d2751f (patch) | |
| tree | 78516c5ad40c6092124a8ed79019ce6baf4b8fc7 | |
| parent | 067ed0bf6fa8f725ab7f3b645d7f3bf1ebb1c533 (diff) | |
| download | tailscale-2f7e7be2ea98c249dcdecf761ec85359a2d2751f.tar.xz tailscale-2f7e7be2ea98c249dcdecf761ec85359a2d2751f.zip | |
control/controlclient: do not alias peer CapMap
Updates #cleanup
Change-Id: I10fd5e04310cdd7894a3caa3045b86eb0a06b6a0
Signed-off-by: Adrian Dewhurst <adrian@tailscale.com>
| -rw-r--r-- | control/controlclient/map.go | 5 | ||||
| -rw-r--r-- | control/controlclient/map_test.go | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/control/controlclient/map.go b/control/controlclient/map.go index e03e57d7a..31854515f 100644 --- a/control/controlclient/map.go +++ b/control/controlclient/map.go @@ -8,6 +8,7 @@ import ( "context" "encoding/json" "fmt" + "maps" "net" "reflect" "slices" @@ -668,14 +669,14 @@ func peerChangeDiff(was tailcfg.NodeView, n *tailcfg.Node) (_ *tailcfg.PeerChang if n.CapMap == nil { pc().CapMap = make(tailcfg.NodeCapMap) } else { - pc().CapMap = n.CapMap + pc().CapMap = maps.Clone(n.CapMap) } break } was.CapMap().Range(func(k tailcfg.NodeCapability, v views.Slice[tailcfg.RawMessage]) bool { nv, ok := n.CapMap[k] if !ok || !views.SliceEqual(v, views.SliceOf(nv)) { - pc().CapMap = n.CapMap + pc().CapMap = maps.Clone(n.CapMap) return false } return true diff --git a/control/controlclient/map_test.go b/control/controlclient/map_test.go index 817e730ca..c3d05b44a 100644 --- a/control/controlclient/map_test.go +++ b/control/controlclient/map_test.go @@ -866,6 +866,11 @@ func TestPeerChangeDiff(t *testing.T) { b: &tailcfg.Node{ID: 1, CapMap: tailcfg.NodeCapMap{}}, want: &tailcfg.PeerChange{NodeID: 1, CapMap: tailcfg.NodeCapMap{}}, }, { + name: "patch-capmap-remove-as-nil", + a: &tailcfg.Node{ID: 1, CapMap: tailcfg.NodeCapMap{tailcfg.CapabilityAdmin: nil}}, + b: &tailcfg.Node{ID: 1}, + want: &tailcfg.PeerChange{NodeID: 1, CapMap: tailcfg.NodeCapMap{}}, + }, { name: "patch-capmap-add-key-to-empty-map", a: &tailcfg.Node{ID: 1}, b: &tailcfg.Node{ID: 1, CapMap: tailcfg.NodeCapMap{tailcfg.CapabilityAdmin: nil}}, |
