Use longer column width
Reduce the number of lines of code by using a longer column width, 100 as is more-or-less standard in this repo. This patch only changes column width (line length), no other changes.
This commit is contained in:
parent
31740710ee
commit
bbd39e5ecc
|
@ -297,43 +297,37 @@ pub trait Encodable {
|
|||
pub trait Decodable: Sized {
|
||||
/// Decode `Self` from a size-limited reader.
|
||||
///
|
||||
/// Like `consensus_decode` but relies on the reader being
|
||||
/// limited in the amount of data it returns, e.g. by
|
||||
/// being wrapped in [`std::io::Take`].
|
||||
/// Like `consensus_decode` but relies on the reader being limited in the amount of data it
|
||||
/// returns, e.g. by being wrapped in [`std::io::Take`].
|
||||
///
|
||||
/// Failling to obide to this requirement might lead to
|
||||
/// memory exhaustion caused by malicious inputs.
|
||||
/// Failling to obide to this requirement might lead to memory exhaustion caused by malicious
|
||||
/// inputs.
|
||||
///
|
||||
/// Users should default to `consensus_decode`, but
|
||||
/// when data to be decoded is already in a byte vector
|
||||
/// of a limited size, calling this function directly
|
||||
/// might be marginally faster (due to avoiding
|
||||
/// extra checks).
|
||||
/// Users should default to `consensus_decode`, but when data to be decoded is already in a byte
|
||||
/// vector of a limited size, calling this function directly might be marginally faster (due to
|
||||
/// avoiding extra checks).
|
||||
///
|
||||
/// ### Rules for trait implementations
|
||||
///
|
||||
/// * Simple types that that have a fixed size (own and member fields),
|
||||
/// don't have to overwrite this method, or be concern with it.
|
||||
/// * Types that deserialize using externally provided length
|
||||
/// should implement it:
|
||||
/// * Make `consensus_decode` forward to `consensus_decode_bytes_from_finite_reader`
|
||||
/// with the reader wrapped by `Take`. Failure to do so, without other
|
||||
/// forms of memory exhaustion protection might lead to resource exhaustion
|
||||
/// vulnerability.
|
||||
/// * Put a max cap on things like `Vec::with_capacity` to avoid oversized
|
||||
/// allocations, and rely on the reader running out of data, and collections
|
||||
/// reallocating on a legitimately oversized input data, instead of trying
|
||||
/// to enforce arbitrary length limits.
|
||||
/// * Types that contain other types that implement custom `consensus_decode_from_finite_reader`,
|
||||
/// should also implement it applying same rules, and in addition make sure to call
|
||||
/// `consensus_decode_from_finite_reader` on all members, to avoid creating redundant
|
||||
/// `Take` wrappers. Failure to do so might result only in a tiny performance hit.
|
||||
/// * Simple types that that have a fixed size (own and member fields), don't have to overwrite
|
||||
/// this method, or be concern with it.
|
||||
/// * Types that deserialize using externally provided length should implement it:
|
||||
/// * Make `consensus_decode` forward to `consensus_decode_bytes_from_finite_reader` with the
|
||||
/// reader wrapped by `Take`. Failure to do so, without other forms of memory exhaustion
|
||||
/// protection might lead to resource exhaustion vulnerability.
|
||||
/// * Put a max cap on things like `Vec::with_capacity` to avoid oversized allocations, and
|
||||
/// rely on the reader running out of data, and collections reallocating on a legitimately
|
||||
/// oversized input data, instead of trying to enforce arbitrary length limits.
|
||||
/// * Types that contain other types that implement custom
|
||||
/// `consensus_decode_from_finite_reader`, should also implement it applying same rules, and
|
||||
/// in addition make sure to call `consensus_decode_from_finite_reader` on all members, to
|
||||
/// avoid creating redundant `Take` wrappers. Failure to do so might result only in a tiny
|
||||
/// performance hit.
|
||||
#[inline]
|
||||
fn consensus_decode_from_finite_reader<R: io::Read + ?Sized>(reader: &mut R) -> Result<Self, Error> {
|
||||
// This method is always strictly less general than, `consensus_decode`,
|
||||
// so it's safe and make sense to default to just calling it.
|
||||
// This way most types, that don't care about protecting against
|
||||
// resource exhaustion due to malicious input, can just ignore it.
|
||||
// This method is always strictly less general than, `consensus_decode`, so it's safe and
|
||||
// make sense to default to just calling it. This way most types, that don't care about
|
||||
// protecting against resource exhaustion due to malicious input, can just ignore it.
|
||||
Self::consensus_decode(reader)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue