Merge pull request #2831 from jkczyz/2024-01-fix-cltv-expiry-delta
authorMatt Corallo <649246+TheBlueMatt@users.noreply.github.com>
Wed, 17 Jan 2024 00:47:48 +0000 (00:47 +0000)
committerGitHub <noreply@github.com>
Wed, 17 Jan 2024 00:47:48 +0000 (00:47 +0000)
Use consistent `cltv_expiry_delta` in `ForwardTlvs`

lightning/src/blinded_path/payment.rs
lightning/src/routing/router.rs

index f4df1e379d931b3ac65cbcdae65441c629554c6c..5d332a76faf57fed3b2fe844b91d5c5d04ed8a81 100644 (file)
@@ -97,12 +97,24 @@ pub struct PaymentConstraints {
        pub htlc_minimum_msat: u64,
 }
 
-impl From<CounterpartyForwardingInfo> for PaymentRelay {
-       fn from(info: CounterpartyForwardingInfo) -> Self {
+impl TryFrom<CounterpartyForwardingInfo> for PaymentRelay {
+       type Error = ();
+
+       fn try_from(info: CounterpartyForwardingInfo) -> Result<Self, ()> {
                let CounterpartyForwardingInfo {
                        fee_base_msat, fee_proportional_millionths, cltv_expiry_delta
                } = info;
-               Self { cltv_expiry_delta, fee_proportional_millionths, fee_base_msat }
+
+               // Avoid exposing esoteric CLTV expiry deltas
+               let cltv_expiry_delta = match cltv_expiry_delta {
+                       0..=40 => 40,
+                       41..=80 => 80,
+                       81..=144 => 144,
+                       145..=216 => 216,
+                       _ => return Err(()),
+               };
+
+               Ok(Self { cltv_expiry_delta, fee_proportional_millionths, fee_base_msat })
        }
 }
 
index 485fd239128df8ab39b0806723a7d3d6b6e24e3a..524bb1bc4c708baa983b65064a76d17ade17ae80 100644 (file)
@@ -114,19 +114,14 @@ impl<G: Deref<Target = NetworkGraph<L>> + Clone, L: Deref, S: Deref, SP: Sized,
                                        None => return None,
                                };
                                let payment_relay: PaymentRelay = match details.counterparty.forwarding_info {
-                                       Some(forwarding_info) => forwarding_info.into(),
+                                       Some(forwarding_info) => match forwarding_info.try_into() {
+                                               Ok(payment_relay) => payment_relay,
+                                               Err(()) => return None,
+                                       },
                                        None => return None,
                                };
 
-                               // Avoid exposing esoteric CLTV expiry deltas
-                               let cltv_expiry_delta = match payment_relay.cltv_expiry_delta {
-                                       0..=40 => 40u32,
-                                       41..=80 => 80u32,
-                                       81..=144 => 144u32,
-                                       145..=216 => 216u32,
-                                       _ => return None,
-                               };
-
+                               let cltv_expiry_delta = payment_relay.cltv_expiry_delta as u32;
                                let payment_constraints = PaymentConstraints {
                                        max_cltv_expiry: tlvs.payment_constraints.max_cltv_expiry + cltv_expiry_delta,
                                        htlc_minimum_msat: details.inbound_htlc_minimum_msat.unwrap_or(0),