mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-02-20 13:34:32 +01:00
rpc: ensure we don't attempt to create a routing hint with a nil edge
In this commit, we fix an existing panic bug related to the recently added routing hints feature. If it's the case that the remote node didn't send us their edge, then when we go to compare the public keys to see if they match, we may attempt to deref an nil pointer. In order to fix this, we'll instead check the edgeInfo, which is guaranteed to also exist if the channel was found in the database. As a defensive step, before we go to actually aces the struct, we'll check that's it's non-nil and proceed if it is nil.
This commit is contained in:
parent
3ee4f5fbd4
commit
4d37508417
1 changed files with 9 additions and 3 deletions
12
rpcserver.go
12
rpcserver.go
|
@ -2321,7 +2321,7 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
|
|||
|
||||
// Fetch the policies for each end of the channel.
|
||||
chanID := channel.ShortChanID().ToUint64()
|
||||
_, p1, p2, err := graph.FetchChannelEdgesByID(chanID)
|
||||
info, p1, p2, err := graph.FetchChannelEdgesByID(chanID)
|
||||
if err != nil {
|
||||
rpcsLog.Errorf("Unable to fetch the routing "+
|
||||
"policies for the edges of the channel "+
|
||||
|
@ -2332,14 +2332,20 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
|
|||
// Now, we'll need to determine which is the correct
|
||||
// policy for HTLCs being sent from the remote node.
|
||||
var remotePolicy *channeldb.ChannelEdgePolicy
|
||||
|
||||
remotePub := channel.IdentityPub.SerializeCompressed()
|
||||
if bytes.Equal(remotePub, p1.Node.PubKeyBytes[:]) {
|
||||
if bytes.Equal(remotePub, info.NodeKey1Bytes[:]) {
|
||||
remotePolicy = p1
|
||||
} else {
|
||||
remotePolicy = p2
|
||||
}
|
||||
|
||||
// If for some reason we don't yet have the edge for
|
||||
// the remote party, then we'll just skip adding this
|
||||
// channel as a routing hint.
|
||||
if remotePolicy == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// Finally, create the routing hint for this channel and
|
||||
// add it to our list of route hints.
|
||||
hint := routing.HopHint{
|
||||
|
|
Loading…
Add table
Reference in a new issue