Skip to content

Commit

Permalink
basichost: avoid modifying slice returned by AddrsFactory (#3068)
Browse files Browse the repository at this point in the history
  • Loading branch information
ivan4th authored Nov 28, 2024
1 parent f421202 commit 8423de3
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 6 deletions.
2 changes: 1 addition & 1 deletion config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -582,7 +582,7 @@ func (cfg *Config) addAutoNAT(h *bhost.BasicHost) error {
if cfg.AddrsFactory != nil {
addrFunc = func() []ma.Multiaddr {
return slices.DeleteFunc(
cfg.AddrsFactory(h.AllAddrs()),
slices.Clone(cfg.AddrsFactory(h.AllAddrs())),
func(a ma.Multiaddr) bool { return !manet.IsPublicAddr(a) })
}
}
Expand Down
8 changes: 3 additions & 5 deletions p2p/host/basic/basic_host.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ func NewHost(n network.Network, opts *HostOpts) (*BasicHost, error) {
h.hps, err = holepunch.NewService(h, h.ids, func() []ma.Multiaddr {
addrs := h.AllAddrs()
if opts.AddrsFactory != nil {
addrs = opts.AddrsFactory(addrs)
addrs = slices.Clone(opts.AddrsFactory(addrs))
}
// AllAddrs may ignore observed addresses in favour of NAT mappings. Use both for hole punching.
addrs = append(addrs, h.ids.OwnObservedAddrs()...)
Expand Down Expand Up @@ -841,12 +841,10 @@ func (h *BasicHost) ConnManager() connmgr.ConnManager {
// When used with AutoRelay, and if the host is not publicly reachable,
// this will only have host's private, relay, and no public addresses.
func (h *BasicHost) Addrs() []ma.Multiaddr {
addrs := h.AddrsFactory(h.AllAddrs())
// Make a copy. Consumers can modify the slice elements
res := make([]ma.Multiaddr, len(addrs))
copy(res, addrs)
addrs := slices.Clone(h.AddrsFactory(h.AllAddrs()))
// Add certhashes for the addresses provided by the user via address factory.
return h.addCertHashes(ma.Unique(res))
return h.addCertHashes(ma.Unique(addrs))
}

// NormalizeMultiaddr returns a multiaddr suitable for equality checks.
Expand Down

0 comments on commit 8423de3

Please sign in to comment.