Struct Limits

struct Limits { ... }

Resource limits for decoding.

Limits can be either strict or non-strict. Non-strict limits are best-effort limits where the library does not guarantee that limit will not be exceeded. Do note that it is still considered a bug if a non-strict limit is exceeded. Some of the underlying decoders do not support such limits, so one cannot rely on these limits being supported. For strict limits, the library makes a stronger guarantee that the limit will not be exceeded. Exceeding a strict limit is considered a critical bug. If a decoder cannot guarantee that it will uphold a strict limit, it must fail with error::LimitErrorKind::Unsupported.

The only currently supported strict limits are the max_image_width and max_image_height limits, but more will be added in the future. LimitSupport will default to support being false, and decoders should enable support for the limits they support in ImageDecoder::set_limits.

The limit check should only ever fail if a limit will be exceeded or an unsupported strict limit is used.

Fields

max_image_width: Option<u32>

The maximum allowed image width. This limit is strict. The default is no limit.

max_image_height: Option<u32>

The maximum allowed image height. This limit is strict. The default is no limit.

max_alloc: Option<u64>

The maximum allowed sum of allocations allocated by the decoder at any one time excluding allocator overhead. This limit is non-strict by default and some decoders may ignore it. The bytes required to store the output image count towards this value. The default is 512MiB.

Implementations

impl Limits

fn no_limits() -> Limits

Disable all limits.

fn check_support(self: &Self, _supported: &LimitSupport) -> ImageResult<()>

This function checks that all currently set strict limits are supported.

fn check_dimensions(self: &Self, width: u32, height: u32) -> ImageResult<()>

This function checks the max_image_width and max_image_height limits given the image width and height.

fn reserve(self: &mut Self, amount: u64) -> ImageResult<()>

This function checks that the current limit allows for reserving the set amount of bytes, it then reduces the limit accordingly.

fn reserve_usize(self: &mut Self, amount: usize) -> ImageResult<()>

This function acts identically to reserve, but takes a usize for convenience.

fn reserve_buffer(self: &mut Self, width: u32, height: u32, color_type: ColorType) -> ImageResult<()>

This function acts identically to reserve, but accepts the width, height and color type used to create an ImageBuffer and does all the math for you.

fn free(self: &mut Self, amount: u64)

This function increases the max_alloc limit with amount. Should only be used together with reserve.

fn free_usize(self: &mut Self, amount: usize)

This function acts identically to free, but takes a usize for convenience.

impl Clone for Limits

fn clone(self: &Self) -> Limits

impl Debug for Limits

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

impl Default for Limits

fn default() -> Limits

impl Eq for Limits

impl Freeze for Limits

impl Hash for Limits

fn hash<__H: $crate::hash::Hasher>(self: &Self, state: &mut __H)

impl PartialEq for Limits

fn eq(self: &Self, other: &Limits) -> bool

impl RefUnwindSafe for Limits

impl Send for Limits

impl StructuralPartialEq for Limits

impl Sync for Limits

impl Unpin for Limits

impl UnsafeUnpin for Limits

impl UnwindSafe for Limits

impl<R, P> ReadPrimitive for Limits

impl<T> Any for Limits

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for Limits

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for Limits

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

impl<T> CloneToUninit for Limits

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

impl<T> From for Limits

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> Pointable for Limits

unsafe fn init(init: <T as Pointable>::Init) -> usize
unsafe fn deref<'a>(ptr: usize) -> &'a T
unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
unsafe fn drop(ptr: usize)

impl<T> ToOwned for Limits

fn to_owned(self: &Self) -> T
fn clone_into(self: &Self, target: &mut T)

impl<T, U> Into for Limits

fn into(self: Self) -> U

Calls U::from(self).

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

impl<T, U> TryFrom for Limits

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

impl<T, U> TryInto for Limits

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