#[non_exhaustive]pub struct JxlDecoderLimits {
pub max_pixels: Option<usize>,
pub max_extra_channels: Option<usize>,
pub max_icc_size: Option<usize>,
pub max_tree_size: Option<usize>,
pub max_patches: Option<usize>,
pub max_spline_points: Option<u32>,
pub max_reference_frames: Option<usize>,
pub max_memory_bytes: Option<u64>,
}Expand description
Security limits for the JXL decoder to prevent resource exhaustion attacks.
These limits protect against “JXL bombs” - maliciously crafted files designed
to exhaust memory or CPU. All limits are optional; None means use the default.
§Example
use zenjxl_decoder::api::JxlDecoderLimits;
// Use restrictive preset for untrusted input
let limits = JxlDecoderLimits::restrictive();
// Or use defaults for normal operation
let defaults = JxlDecoderLimits::default();
// Or unlimited for trusted input (use with caution)
let unlimited = JxlDecoderLimits::unlimited();Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.max_pixels: Option<usize>Maximum total pixels (width × height). Default: 2^30 (~1 billion). This is checked early during header parsing.
max_extra_channels: Option<usize>Maximum number of extra channels (alpha, depth, etc.). Default: 256. Each extra channel requires memory proportional to image size.
max_icc_size: Option<usize>Maximum ICC profile size in bytes. Default: 2^28 (256 MB).
max_tree_size: Option<usize>Maximum modular tree size (number of nodes). Default: 2^22. Limits memory and CPU for tree-based entropy coding.
max_patches: Option<usize>Maximum number of patches. Default: derived from image size. Set to limit patch-based attacks.
max_spline_points: Option<u32>Maximum number of spline control points. Default: 2^20.
max_reference_frames: Option<usize>Maximum number of reference frames stored. Default: 4. Each reference frame consumes memory equal to the image size.
max_memory_bytes: Option<u64>Maximum total memory budget in bytes. Default: None (unlimited). When set, the decoder tracks allocations and fails if budget exceeded. This provides defense-in-depth against memory exhaustion attacks.
Implementations§
Source§impl JxlDecoderLimits
impl JxlDecoderLimits
Sourcepub fn unlimited() -> Self
pub fn unlimited() -> Self
Returns limits with no restrictions (all None). Use with caution - only for trusted input.
Sourcepub fn restrictive() -> Self
pub fn restrictive() -> Self
Returns restrictive limits suitable for untrusted web content.
Trait Implementations§
Source§impl Clone for JxlDecoderLimits
impl Clone for JxlDecoderLimits
Source§fn clone(&self) -> JxlDecoderLimits
fn clone(&self) -> JxlDecoderLimits
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more