mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 23:08:36 +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"
|
name = "msg_pong_target"
|
||||||
path = "fuzz_targets/msg_pong_target.rs"
|
path = "fuzz_targets/msg_pong_target.rs"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "msg_error_message_target"
|
||||||
|
path = "fuzz_targets/msg_error_message_target.rs"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "msg_accept_channel_target"
|
name = "msg_accept_channel_target"
|
||||||
path = "fuzz_targets/msg_targets/msg_accept_channel_target.rs"
|
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]]
|
[[bin]]
|
||||||
name = "msg_channel_reestablish_target"
|
name = "msg_channel_reestablish_target"
|
||||||
path = "fuzz_targets/msg_targets/msg_channel_reestablish_target.rs"
|
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};
|
use lightning::ln::msgs::{MsgEncodable, MsgDecodable};
|
||||||
|
|
||||||
mod utils;
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn do_test(data: &[u8]) {
|
pub fn do_test(data: &[u8]) {
|
||||||
reset_rng_state();
|
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")]
|
#[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')
|
tn=$(echo $target | sed 's/\([a-z0-9]\)\([A-Z]\)/\1_\2/g')
|
||||||
fn=msg_$(echo $tn | tr '[:upper:]' '[:lower:]')_target.rs
|
fn=msg_$(echo $tn | tr '[:upper:]' '[:lower:]')_target.rs
|
||||||
cat msg_target_template.txt | sed s/MSG_TARGET/$target/ > $fn
|
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 bitcoin::blockdata::script::Script;
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fmt;
|
use std::{cmp, fmt};
|
||||||
use std::result::Result;
|
use std::result::Result;
|
||||||
|
|
||||||
use util::{byte_utils, internal_traits, events};
|
use util::{byte_utils, internal_traits, events};
|
||||||
|
@ -1626,11 +1626,9 @@ impl MsgDecodable for ErrorMessage {
|
||||||
if v.len() < 34 {
|
if v.len() < 34 {
|
||||||
return Err(DecodeError::ShortRead);
|
return Err(DecodeError::ShortRead);
|
||||||
}
|
}
|
||||||
let len = byte_utils::slice_to_be16(&v[32..34]);
|
// Unlike most messages, BOLT 1 requires we truncate our read if the value is out of range
|
||||||
if v.len() < 34 + len as usize {
|
let len = cmp::min(byte_utils::slice_to_be16(&v[32..34]) as usize, v.len() - 34);
|
||||||
return Err(DecodeError::ShortRead);
|
let data = match String::from_utf8(v[34..34 + len].to_vec()) {
|
||||||
}
|
|
||||||
let data = match String::from_utf8(v[34..34 + len as usize].to_vec()) {
|
|
||||||
Ok(s) => s,
|
Ok(s) => s,
|
||||||
Err(_) => return Err(DecodeError::BadText),
|
Err(_) => return Err(DecodeError::BadText),
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue