Skip to content

Commit

Permalink
rpc: ensure we don't attempt to create a routing hint with a nil edge
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Roasbeef committed Jun 5, 2018
1 parent 3ee4f5f commit 4d37508
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions rpcserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 "+
Expand All @@ -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{
Expand Down

0 comments on commit 4d37508

Please sign in to comment.