From: Matt Corallo <649246+TheBlueMatt@users.noreply.github.com> Date: Thu, 15 Jul 2021 12:59:45 +0000 (+0000) Subject: Merge pull request #1002 from valentinewallace/2021-07-fix-features-index-bounds X-Git-Tag: v0.0.100~27 X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=commitdiff_plain;h=ccd7b6c554393f18df9ca4821a9c44078c1bcb8c;hp=afae12ea1e610634f90335443e3fe9f126bf5551;p=rust-lightning Merge pull request #1002 from valentinewallace/2021-07-fix-features-index-bounds --- diff --git a/lightning/src/ln/features.rs b/lightning/src/ln/features.rs index b459baf06..9d865d15e 100644 --- a/lightning/src/ln/features.rs +++ b/lightning/src/ln/features.rs @@ -490,13 +490,14 @@ impl Features { /// Converts `Features` to `Features`. Only known `T` features relevant to context `C` are /// included in the result. fn to_context_internal(&self) -> Features { - let byte_count = C::KNOWN_FEATURE_MASK.len(); + let from_byte_count = T::KNOWN_FEATURE_MASK.len(); + let to_byte_count = C::KNOWN_FEATURE_MASK.len(); let mut flags = Vec::new(); for (i, byte) in self.flags.iter().enumerate() { - if i < byte_count { - let known_source_features = T::KNOWN_FEATURE_MASK[i]; - let known_target_features = C::KNOWN_FEATURE_MASK[i]; - flags.push(byte & known_source_features & known_target_features); + if i < from_byte_count && i < to_byte_count { + let from_known_features = T::KNOWN_FEATURE_MASK[i]; + let to_known_features = C::KNOWN_FEATURE_MASK[i]; + flags.push(byte & from_known_features & to_known_features); } } Features:: { flags, mark: PhantomData, }