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

@@ -132,7 +132,7 @@ var _ SizeableMessage = (*ChannelUpdate1)(nil)
// io.Reader observing the specified protocol version.
//
// This is part of the lnwire.Message interface.
func (a *ChannelUpdate1) Decode(r io.Reader, pver uint32) error {
func (a *ChannelUpdate1) Decode(r io.Reader, _ uint32) error {
err := ReadElements(r,
&a.Signature,
a.ChainHash[:],
@@ -156,7 +156,12 @@ func (a *ChannelUpdate1) Decode(r io.Reader, pver uint32) error {
}
}
return a.ExtraOpaqueData.Decode(r)
err = a.ExtraOpaqueData.Decode(r)
if err != nil {
return err
}
return a.ExtraOpaqueData.ValidateTLV()
}
// Encode serializes the target ChannelUpdate into the passed io.Writer