mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 15:02:20 +01:00
Update error deserialization in compliance with BOLT #1
This commit is contained in:
parent
a3247abb4e
commit
755b76bf83
4 changed files with 14 additions and 14 deletions
|
@ -60,6 +60,10 @@ path = "fuzz_targets/msg_ping_target.rs"
|
|||
name = "msg_pong_target"
|
||||
path = "fuzz_targets/msg_pong_target.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "msg_error_message_target"
|
||||
path = "fuzz_targets/msg_error_message_target.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "msg_accept_channel_target"
|
||||
path = "fuzz_targets/msg_targets/msg_accept_channel_target.rs"
|
||||
|
@ -119,7 +123,3 @@ path = "fuzz_targets/msg_targets/msg_update_fail_htlc_target.rs"
|
|||
[[bin]]
|
||||
name = "msg_channel_reestablish_target"
|
||||
path = "fuzz_targets/msg_targets/msg_channel_reestablish_target.rs"
|
||||
|
||||
[[bin]]
|
||||
name = "msg_error_message_target"
|
||||
path = "fuzz_targets/msg_targets/msg_error_message_target.rs"
|
||||
|
|
|
@ -8,12 +8,14 @@ use lightning::util::reset_rng_state;
|
|||
|
||||
use lightning::ln::msgs::{MsgEncodable, MsgDecodable};
|
||||
|
||||
mod utils;
|
||||
|
||||
#[inline]
|
||||
pub fn do_test(data: &[u8]) {
|
||||
reset_rng_state();
|
||||
test_msg!(msgs::ErrorMessage, data);
|
||||
if let Ok(msg) = msgs::ErrorMessage::decode(data){
|
||||
let enc = msg.encode();
|
||||
assert_eq!(&data[0..32], &enc[0..32]);
|
||||
assert_eq!(&data[34..enc.len()], &enc[34..]);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "afl")]
|
|
@ -1,4 +1,4 @@
|
|||
for target in CommitmentSigned FundingCreated FundingLocked FundingSigned OpenChannel RevokeAndACK Shutdown UpdateAddHTLC UpdateFailHTLC UpdateFailMalformedHTLC UpdateFee UpdateFulfillHTLC AcceptChannel ClosingSigned ChannelReestablish ErrorMessage; do
|
||||
for target in CommitmentSigned FundingCreated FundingLocked FundingSigned OpenChannel RevokeAndACK Shutdown UpdateAddHTLC UpdateFailHTLC UpdateFailMalformedHTLC UpdateFee UpdateFulfillHTLC AcceptChannel ClosingSigned ChannelReestablish; do
|
||||
tn=$(echo $target | sed 's/\([a-z0-9]\)\([A-Z]\)/\1_\2/g')
|
||||
fn=msg_$(echo $tn | tr '[:upper:]' '[:lower:]')_target.rs
|
||||
cat msg_target_template.txt | sed s/MSG_TARGET/$target/ > $fn
|
||||
|
|
|
@ -5,7 +5,7 @@ use bitcoin::network::serialize::{deserialize,serialize};
|
|||
use bitcoin::blockdata::script::Script;
|
||||
|
||||
use std::error::Error;
|
||||
use std::fmt;
|
||||
use std::{cmp, fmt};
|
||||
use std::result::Result;
|
||||
|
||||
use util::{byte_utils, internal_traits, events};
|
||||
|
@ -1626,11 +1626,9 @@ impl MsgDecodable for ErrorMessage {
|
|||
if v.len() < 34 {
|
||||
return Err(DecodeError::ShortRead);
|
||||
}
|
||||
let len = byte_utils::slice_to_be16(&v[32..34]);
|
||||
if v.len() < 34 + len as usize {
|
||||
return Err(DecodeError::ShortRead);
|
||||
}
|
||||
let data = match String::from_utf8(v[34..34 + len as usize].to_vec()) {
|
||||
// Unlike most messages, BOLT 1 requires we truncate our read if the value is out of range
|
||||
let len = cmp::min(byte_utils::slice_to_be16(&v[32..34]) as usize, v.len() - 34);
|
||||
let data = match String::from_utf8(v[34..34 + len].to_vec()) {
|
||||
Ok(s) => s,
|
||||
Err(_) => return Err(DecodeError::BadText),
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue