From 9296537edb98649031f947b03ba7104ff180da22 Mon Sep 17 00:00:00 2001 From: Dustin Dettmer Date: Tue, 5 Jul 2022 15:44:38 -0500 Subject: [PATCH] peer_control: Fix check_funding_details assert Check funding_outnum validity first to avoid reading invalid outputs Changelog-Fixed: Fixed a potential issue if the number of outputs decreases in a dualopen RBF or splice. --- lightningd/peer_control.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/lightningd/peer_control.c b/lightningd/peer_control.c index 284dc78bb..0b817c5e5 100644 --- a/lightningd/peer_control.c +++ b/lightningd/peer_control.c @@ -1437,15 +1437,16 @@ static bool check_funding_details(const struct bitcoin_tx *tx, struct amount_sat funding, u32 funding_outnum) { - struct amount_asset asset = - bitcoin_tx_output_get_amount(tx, funding_outnum); - - if (!amount_asset_is_main(&asset)) - return false; + struct amount_asset asset; if (funding_outnum >= tx->wtx->num_outputs) return false; + asset = bitcoin_tx_output_get_amount(tx, funding_outnum); + + if (!amount_asset_is_main(&asset)) + return false; + if (!amount_sat_eq(amount_asset_to_sat(&asset), funding)) return false;