From 809d591f779f4b5444b7700a8005f4981c509779 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Fri, 7 Jan 2022 20:11:31 +0000 Subject: [PATCH] Rely on Error/Warning message data lengths being correct In https://github.com/lightning/bolts/pull/950, the (somewhat strange) requirement that error messages be handled even if the length field is set larger than the size of the package was removed. Here we change the code to drop the special handling for this, opting to just fail to read the message if the length is incorrect. --- lightning/src/ln/msgs.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lightning/src/ln/msgs.rs b/lightning/src/ln/msgs.rs index 6c04636a435..ae3849b0aff 100644 --- a/lightning/src/ln/msgs.rs +++ b/lightning/src/ln/msgs.rs @@ -1529,10 +1529,11 @@ impl Readable for ErrorMessage { Ok(Self { channel_id: Readable::read(r)?, data: { - let mut sz: usize = ::read(r)? as usize; - let data = read_to_end(r)?; - sz = cmp::min(data.len(), sz); - match String::from_utf8(data[..sz as usize].to_vec()) { + let sz: usize = ::read(r)? as usize; + let mut data = Vec::with_capacity(sz); + data.resize(sz, 0); + r.read_exact(&mut data)?; + match String::from_utf8(data) { Ok(s) => s, Err(_) => return Err(DecodeError::InvalidValue), } @@ -1555,10 +1556,11 @@ impl Readable for WarningMessage { Ok(Self { channel_id: Readable::read(r)?, data: { - let mut sz: usize = ::read(r)? as usize; - let data = read_to_end(r)?; - sz = cmp::min(data.len(), sz); - match String::from_utf8(data[..sz as usize].to_vec()) { + let sz: usize = ::read(r)? as usize; + let mut data = Vec::with_capacity(sz); + data.resize(sz, 0); + r.read_exact(&mut data)?; + match String::from_utf8(data) { Ok(s) => s, Err(_) => return Err(DecodeError::InvalidValue), }