From: Matt Corallo Date: Fri, 6 Jan 2023 20:05:07 +0000 (+0000) Subject: Do not rely on auto-deref'ing when aaccessing a `Hash{Map,Set}` X-Git-Tag: v0.0.114-beta~61^2~2 X-Git-Url: http://git.bitcoin.ninja/?a=commitdiff_plain;h=11524884cb105f81126b9f98ca0ae9a7379d1513;p=rust-lightning Do not rely on auto-deref'ing when aaccessing a `Hash{Map,Set}` In newer versions of `hashbrown` this code would be broken. While we aren't updating `hashbrown` any time soon (as it requires an MSRV bump), it is useful to swap for a newer `hashbrown` when fuzzing, which this makes easier. --- diff --git a/lightning/src/chain/onchaintx.rs b/lightning/src/chain/onchaintx.rs index d6884428e..f526cc8aa 100644 --- a/lightning/src/chain/onchaintx.rs +++ b/lightning/src/chain/onchaintx.rs @@ -476,8 +476,8 @@ impl OnchainTxHandler { // remove it once it reaches the confirmation threshold, or to generate a new claim if the // transaction is reorged out. let mut all_inputs_have_confirmed_spend = true; - for outpoint in &request_outpoints { - if let Some(first_claim_txid_height) = self.claimable_outpoints.get(outpoint) { + for outpoint in request_outpoints.iter() { + if let Some(first_claim_txid_height) = self.claimable_outpoints.get(*outpoint) { // We check for outpoint spends within claims individually rather than as a set // since requests can have outpoints split off. if !self.onchain_events_awaiting_threshold_conf.iter() @@ -811,7 +811,7 @@ impl OnchainTxHandler { for outpoint in request.outpoints() { log_debug!(logger, "Removing claim tracking for {} due to maturation of claim package {}.", outpoint, log_bytes!(package_id)); - self.claimable_outpoints.remove(&outpoint); + self.claimable_outpoints.remove(outpoint); #[cfg(anchors)] self.pending_claim_events.remove(&package_id); } @@ -820,7 +820,7 @@ impl OnchainTxHandler { OnchainEvent::ContentiousOutpoint { package } => { log_debug!(logger, "Removing claim tracking due to maturation of claim tx for outpoints:"); log_debug!(logger, " {:?}", package.outpoints()); - self.claimable_outpoints.remove(&package.outpoints()[0]); + self.claimable_outpoints.remove(package.outpoints()[0]); } } } else { @@ -898,7 +898,7 @@ impl OnchainTxHandler { //- resurect outpoint back in its claimable set and regenerate tx match entry.event { OnchainEvent::ContentiousOutpoint { package } => { - if let Some(ancestor_claimable_txid) = self.claimable_outpoints.get(&package.outpoints()[0]) { + if let Some(ancestor_claimable_txid) = self.claimable_outpoints.get(package.outpoints()[0]) { if let Some(request) = self.pending_claim_requests.get_mut(&ancestor_claimable_txid.0) { request.merge_package(package); // Using a HashMap guarantee us than if we have multiple outpoints getting diff --git a/lightning/src/ln/channelmanager.rs b/lightning/src/ln/channelmanager.rs index 1364e96a9..1ab215735 100644 --- a/lightning/src/ln/channelmanager.rs +++ b/lightning/src/ln/channelmanager.rs @@ -2102,7 +2102,7 @@ where // short_channel_id is non-0 in any ::Forward. if let &PendingHTLCRouting::Forward { ref short_channel_id, .. } = routing { if let Some((err, mut code, chan_update)) = loop { - let id_option = self.short_to_chan_info.read().unwrap().get(&short_channel_id).cloned(); + let id_option = self.short_to_chan_info.read().unwrap().get(short_channel_id).cloned(); let forwarding_chan_info_opt = match id_option { None => { // unknown_next_peer // Note that this is likely a timing oracle for detecting whether an scid is a @@ -7116,7 +7116,7 @@ where } } - for (ref funding_txo, ref mut monitor) in args.channel_monitors.iter_mut() { + for (funding_txo, monitor) in args.channel_monitors.iter_mut() { if !funding_txo_set.contains(funding_txo) { log_info!(args.logger, "Broadcasting latest holder commitment transaction for closed channel {}", log_bytes!(funding_txo.to_channel_id())); monitor.broadcast_latest_holder_commitment_txn(&args.tx_broadcaster, &args.logger);