Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions core/peer/addrinfo_serde.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package peer

import (
"encoding/json"
"fmt"
"os"

"github.com/libp2p/go-libp2p/core/internal/catch"

Expand All @@ -17,9 +19,16 @@ type addrInfoJson struct {
func (pi AddrInfo) MarshalJSON() (res []byte, err error) {
defer func() { catch.HandlePanic(recover(), &err, "libp2p addr info marshal") }()

addrs := make([]string, len(pi.Addrs))
for i, addr := range pi.Addrs {
addrs[i] = addr.String()
// Skip nil addresses to avoid panic if slice contains corrupted entries
// (likely due to data race). Log warning for visibility.
// See: https://github.com/ipfs/kubo/issues/11116
addrs := make([]string, 0, len(pi.Addrs))
for _, addr := range pi.Addrs {
if addr == nil {
fmt.Fprintf(os.Stderr, "go-libp2p: nil multiaddr in AddrInfo.MarshalJSON for peer %s (possible data race)\n", pi.ID)
continue
}
addrs = append(addrs, addr.String())
}
return json.Marshal(&addrInfoJson{
ID: pi.ID,
Expand Down
Loading