Skip to content

Commit

Permalink
fix(network messages): add limits to rejection message and reason (#4687
Browse files Browse the repository at this point in the history
)

* add limits to rejection message and reason

* truncate bytes instead of characters

* change `MAX_REJECT_REASON_LENGTH` to match zcashd

* clippy

* avoid panix in the slice

* Escape and truncate error messages

Co-authored-by: teor <[email protected]>
  • Loading branch information
oxarbitrage and teor2345 authored Jun 29, 2022
1 parent 9e277ed commit 4543a25
Showing 1 changed file with 29 additions and 7 deletions.
36 changes: 29 additions & 7 deletions zebra-network/src/protocol/external/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -340,25 +340,47 @@ pub enum Message {
FilterClear,
}

/// The maximum size of the rejection message.
///
/// This is equivalent to `COMMAND_SIZE` in zcashd.
const MAX_REJECT_MESSAGE_LENGTH: usize = 12;

/// The maximum size of the rejection reason.
///
/// This is equivalent to `MAX_REJECT_MESSAGE_LENGTH` in zcashd.
const MAX_REJECT_REASON_LENGTH: usize = 111;

// TODO: add tests for Error conversion and Reject message serialization (#4633)
// (Zebra does not currently send reject messages, and it ignores received reject messages.)
impl<E> From<E> for Message
where
E: Error,
{
fn from(e: E) -> Self {
let message = e
.to_string()
.escape_default()
.take(MAX_REJECT_MESSAGE_LENGTH)
.collect();
let reason = e
.source()
.map(ToString::to_string)
.unwrap_or_default()
.escape_default()
.take(MAX_REJECT_REASON_LENGTH)
.collect();

Message::Reject {
message: e.to_string(),
message,

// The generic case, impls for specific error types should
// use specific varieties of `RejectReason`.
ccode: RejectReason::Other,

reason: if let Some(reason) = e.source() {
reason.to_string()
} else {
String::from("")
},
reason,

// Allow this to be overridden but not populated by default, methinks.
// The hash of the rejected block or transaction.
// We don't have that data here, so the caller needs to fill it in later.
data: None,
}
}
Expand Down

0 comments on commit 4543a25

Please sign in to comment.