lnwire: validate that gossip messages contain valid TLV

In this commit, we check that the extra bytes appended to gossip
messages contain valid TLV streams. We do this here for:
- channel_announcement
- channel_announcement_2
- channel_update
- channel_update_2
- node_announcement

This is in preparation for the SQL version of the graph store which will
normalise TLV streams at persistence time.
This commit is contained in:
Elle Mouton
2025-05-07 10:36:05 +02:00
parent 0db91304cf
commit 1410a0949d
7 changed files with 47 additions and 9 deletions

View File

@@ -112,8 +112,8 @@ var _ SizeableMessage = (*NodeAnnouncement)(nil)
// io.Reader observing the specified protocol version.
//
// This is part of the lnwire.Message interface.
func (a *NodeAnnouncement) Decode(r io.Reader, pver uint32) error {
return ReadElements(r,
func (a *NodeAnnouncement) Decode(r io.Reader, _ uint32) error {
err := ReadElements(r,
&a.Signature,
&a.Features,
&a.Timestamp,
@@ -123,6 +123,11 @@ func (a *NodeAnnouncement) Decode(r io.Reader, pver uint32) error {
&a.Addresses,
&a.ExtraOpaqueData,
)
if err != nil {
return err
}
return a.ExtraOpaqueData.ValidateTLV()
}
// Encode serializes the target NodeAnnouncement into the passed io.Writer