Handle only-path-overflows-fee in get_route and avoid PubKey::new()
authorMatt Corallo <git@bluematt.me>
Wed, 15 Aug 2018 21:13:34 +0000 (17:13 -0400)
committerMatt Corallo <git@bluematt.me>
Fri, 17 Aug 2018 00:51:50 +0000 (20:51 -0400)
Found by fuzzer

src/ln/router.rs

index 665a24d2886ec5d8106333ef504ec565277c9348..bc9c868add32b948052df9b9cc9a4e6a6213b590 100644 (file)
@@ -448,7 +448,7 @@ impl Router {
                                                                node.lowest_inbound_channel_fee_base_msat,
                                                                node.lowest_inbound_channel_fee_proportional_millionths,
                                                                RouteHop {
-                                                                       pubkey: PublicKey::new(),
+                                                                       pubkey: $dest_node_id.clone(),
                                                                        short_channel_id: 0,
                                                                        fee_msat: 0,
                                                                        cltv_expiry_delta: 0,
@@ -537,7 +537,10 @@ impl Router {
                        if pubkey == network.our_node_id {
                                let mut res = vec!(dist.remove(&network.our_node_id).unwrap().3);
                                while res.last().unwrap().pubkey != *target {
-                                       let new_entry = dist.remove(&res.last().unwrap().pubkey).unwrap().3;
+                                       let new_entry = match dist.remove(&res.last().unwrap().pubkey) {
+                                               Some(hop) => hop.3,
+                                               None => return Err(HandleError{err: "Failed to find a non-fee-overflowing path to the given destination", action: None}),
+                                       };
                                        res.last_mut().unwrap().fee_msat = new_entry.fee_msat;
                                        res.last_mut().unwrap().cltv_expiry_delta = new_entry.cltv_expiry_delta;
                                        res.push(new_entry);