From bbd39e5ecc5abbadb477a2e85e9c3fa2e6ab5fcf Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Mon, 31 Oct 2022 12:31:45 +1100 Subject: [PATCH] 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. --- bitcoin/src/consensus/encode.rs | 54 +++++++++++++++------------------ 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/bitcoin/src/consensus/encode.rs b/bitcoin/src/consensus/encode.rs index 4486e147..d9fbbf9e 100644 --- a/bitcoin/src/consensus/encode.rs +++ b/bitcoin/src/consensus/encode.rs @@ -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(reader: &mut R) -> Result { - // 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) }