Skip to main content

ZipBomb

Struct ZipBomb 

Source
pub struct ZipBomb { /* private fields */ }
Available on crate feature compression only.
Expand description

A minimal in-memory ZIP archive that acts as a decompression or resource exhaustion trap.

ZipBomb produces a small, valid ZIP archive that declares an extremely large uncompressed file, with no actual payload. When extracted, it causes naive clients or bots to attempt writing or allocating gigabytes of disk or memory, despite its tiny compressed size.

This is useful for:

  • Honeypots
  • Anti-bot traps
  • Defensive deception systems

Implementations§

Source§

impl ZipBomb

Source

pub const fn new(filename: ArcStr) -> Self

Create a new ZipBomb.

Source

pub fn with_depth(self, depth: usize) -> Self

Overwrite the default depth of the bomb.

Default is used in case the value given is 0.

Source

pub fn set_depth(&mut self, depth: usize) -> &mut Self

Overwrite the default depth of the bomb.

Default is used in case the value given is 0.

Source

pub fn with_fanout(self, fanout: usize) -> Self

Overwrite the default fanout of the bomb.

Default is used in case the value given is 0.

Source

pub fn set_fanout(&mut self, fanout: usize) -> &mut Self

Overwrite the default fanout of the bomb.

Default is used in case the value given is 0.

Source

pub fn with_file_size(self, file_size: usize) -> Self

Overwrite the default file size of the leaf files of the bomb.

Default is used in case the value given is 0.

Source

pub fn set_file_size(&mut self, file_size: usize) -> &mut Self

Overwrite the default file size of the leaf files of the bomb.

Default is used in case the value given is 0.

Source

pub fn generate_body(&self) -> Body

Try to generate a ZipBomb as a Body

Source

pub fn generate_response(&self) -> Response

Generate a Response from the ZipBomb.

Source

pub fn into_generate_body(self) -> Body

Turn the ZipBomb into a Body

Source

pub fn into_generate_response(self) -> Response

Turn the ZipBomb into a Response

Trait Implementations§

Source§

impl Clone for ZipBomb

Source§

fn clone(&self) -> ZipBomb

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ZipBomb

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ZipBomb

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl From<ZipBomb> for Body

Source§

fn from(value: ZipBomb) -> Self

Converts to this type from the input type.
Source§

impl IntoResponse for ZipBomb

Source§

fn into_response(self) -> Response

Create a response.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<B> BodyExtractExt for B
where B: Into<Body> + Send + 'static,

Source§

async fn try_into_json<T>(self) -> Result<T, Box<dyn Error + Sync + Send>>
where T: DeserializeOwned + Send + 'static,

Try to deserialize the (contained) body as a JSON object. Read more
Source§

async fn try_into_json_streaming<T>( self, ) -> Result<T, Box<dyn Error + Sync + Send>>
where T: DeserializeOwned + Send + 'static,

Try to deserialize the (contained) body as a JSON object, streaming bytes from the body directly into the JSON parser instead of buffering the whole body first. Read more
Source§

async fn try_into_string(self) -> Result<String, Box<dyn Error + Sync + Send>>

Try to turn the (contained) body in an utf-8 string.
Source§

async fn try_capture_json( self, selectors: impl IntoIterator<Item = JsonPath> + Send, max_capture_bytes: usize, ) -> Result<Vec<OwnedCapturedValue>, Box<dyn Error + Sync + Send>>

Capture JSON values matching selectors while streaming over the body. Read more
Source§

async fn try_into_json_with<T>( self, opts: CollectOptions, ) -> Result<T, CollectError>
where T: DeserializeOwned + Send + 'static,

Like try_into_json, but bounded by opts (a size cap and/or timeout). Read more
Source§

async fn try_into_string_with( self, opts: CollectOptions, ) -> Result<String, CollectError>

Like try_into_string, but bounded by opts. See try_into_json_with for the error semantics.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
Source§

impl<T> FutureExt for T

Source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
Source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<O> IntoEndpointService<Response> for O
where O: IntoResponse + Clone + Send + Sync + 'static,

Source§

impl<O, State> IntoEndpointServiceWithState<Response, State> for O
where O: IntoResponse + Clone + Send + Sync + 'static,

Source§

type Service = StaticOutput<O>

Source§

fn into_endpoint_service_with_state( self, _state: State, ) -> <O as IntoEndpointServiceWithState<Response, State>>::Service

convert the type into a rama_core::Service with state.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> RamaFrom<T> for U
where U: From<T>,

Source§

fn rama_from(value: T) -> U

Source§

impl<T, U, CrateMarker> RamaInto<U, CrateMarker> for T
where U: RamaFrom<T, CrateMarker>,

Source§

fn rama_into(self) -> U

Source§

impl<T, U> RamaTryFrom<T> for U
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

Source§

fn rama_try_from(value: T) -> Result<U, <U as RamaTryFrom<T>>::Error>

Source§

impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for T
where U: RamaTryFrom<T, CrateMarker>,

Source§

type Error = <U as RamaTryFrom<T, CrateMarker>>::Error

Source§

fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more