pub enum BlobError {
Truncated {
need: usize,
have: usize,
},
UnsupportedRequirement(u64),
ForgedLength {
field: &'static str,
value: u64,
},
InvalidUtf8(&'static str),
Malformed(&'static str),
}Expand description
What went wrong parsing a blob.
Every variant is a refusal, never a best-effort recovery: a blob arrives from another wheel, another process, or a network, so every count and length in its header is attacker-controlled. Recovering from a bad one means acting on a value an attacker chose.
Variants§
Truncated
The buffer is shorter than the structure it claims to contain.
UnsupportedRequirement(u64)
required_mask carries a bit this build does not understand. The
producer needs an interpretation we cannot provide, so proceeding would
silently misread the data.
ForgedLength
A count or length would overflow when multiplied out, or derives an offset past the end of the blob.
InvalidUtf8(&'static str)
A string region is not valid UTF-8.
Malformed(&'static str)
The blob is internally inconsistent in a way no single field explains.
Trait Implementations§
impl Eq for BlobError
Source§impl Error for BlobError
impl Error for BlobError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
impl StructuralPartialEq for BlobError
Auto Trait Implementations§
impl Freeze for BlobError
impl RefUnwindSafe for BlobError
impl Send for BlobError
impl Sync for BlobError
impl Unpin for BlobError
impl UnsafeUnpin for BlobError
impl UnwindSafe for BlobError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more