fix: addPeer could unintentionally override metadata of previously stored peer with defaults and empty (#3403)

* fix: addPeer could unintentionally override metadata of previously stored peer with defaults and empty

* Add explanation why we discard updates of different peerStore books.

Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com>

---------

Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com>
This commit is contained in:
NagyZoltanPeter 2025-05-12 15:23:19 +02:00 committed by GitHub
parent 42ab866f2c
commit 094a68e41d

View File

@ -100,16 +100,23 @@ proc addPeer*(peerStore: PeerStore, peer: RemotePeerInfo, origin = UnknownOrigin
protos.add($new_proto)
peerStore[ProtoBook][peer.peerId] = protos
peerStore[AgentBook][peer.peerId] = peer.agent
peerStore[ProtoVersionBook][peer.peerId] = peer.protoVersion
peerStore[KeyBook][peer.peerId] = peer.publicKey
peerStore[ConnectionBook][peer.peerId] = peer.connectedness
peerStore[DisconnectBook][peer.peerId] = peer.disconnectTime
peerStore[SourceBook][peer.peerId] =
if origin != UnknownOrigin: origin else: peer.origin
peerStore[DirectionBook][peer.peerId] = peer.direction
peerStore[LastFailedConnBook][peer.peerId] = peer.lastFailedConn
peerStore[NumberFailedConnBook][peer.peerId] = peer.numberFailedConn
## We don't care whether the item was already present in the table or not. Hence, we always discard the hasKeyOrPut's bool returned value
discard peerStore[AgentBook].book.hasKeyOrPut(peer.peerId, peer.agent)
discard peerStore[ProtoVersionBook].book.hasKeyOrPut(peer.peerId, peer.protoVersion)
discard peerStore[KeyBook].book.hasKeyOrPut(peer.peerId, peer.publicKey)
discard peerStore[ConnectionBook].book.hasKeyOrPut(peer.peerId, peer.connectedness)
discard peerStore[DisconnectBook].book.hasKeyOrPut(peer.peerId, peer.disconnectTime)
if origin != UnknownOrigin:
peerStore[SourceBook][peer.peerId] = origin
else:
discard peerStore[SourceBook].book.hasKeyOrPut(peer.peerId, peer.origin)
discard peerStore[DirectionBook].book.hasKeyOrPut(peer.peerId, peer.direction)
discard
peerStore[LastFailedConnBook].book.hasKeyOrPut(peer.peerId, peer.lastFailedConn)
discard
peerStore[NumberFailedConnBook].book.hasKeyOrPut(peer.peerId, peer.numberFailedConn)
if peer.enr.isSome():
peerStore[ENRBook][peer.peerId] = peer.enr.get()