pub struct ResourceLimits {
pub max_statements: usize,
pub max_labels: usize,
pub max_output_bytes: usize,
pub max_errors: usize,
pub max_recursion_depth: usize,
pub max_source_bytes: usize,
pub max_iterations: usize,
}Expand description
Configurable resource limits for defense against denial-of-service.
When processing untrusted assembly input, these limits prevent pathological inputs from consuming unbounded memory or CPU time. All limits default to generous values that are sufficient for any reasonable assembly program.
§Examples
use asm_rs::{Assembler, Arch};
use asm_rs::assembler::ResourceLimits;
let mut asm = Assembler::new(Arch::X86_64);
asm.limits(ResourceLimits {
max_statements: 1_000,
max_labels: 100,
max_output_bytes: 4096,
max_errors: 16,
max_recursion_depth: 64,
max_source_bytes: 64 * 1024 * 1024,
max_iterations: 100_000,
});
// Assembly of very large or pathological inputs will now error early.Fields§
§max_statements: usizeMaximum number of parsed statements (instructions + directives + labels). Default: 1,000,000.
max_labels: usizeMaximum number of labels that can be defined. Default: 100,000.
max_output_bytes: usizeMaximum output size in bytes. Default: 16 MiB.
max_errors: usizeMaximum accumulated errors before bailing. Default: 64.
max_recursion_depth: usizeMaximum macro expansion recursion depth. Default: 256.
max_source_bytes: usizeMaximum input source bytes per emit() call. Default: 64 MiB.
Guards against multi-gigabyte inputs consuming unbounded memory
during lexing/parsing before any other limit can fire.
max_iterations: usizeMaximum total preprocessor iterations (.rept/.irp/.irpc).
Default: 100,000.
Trait Implementations§
Source§impl Clone for ResourceLimits
impl Clone for ResourceLimits
Source§fn clone(&self) -> ResourceLimits
fn clone(&self) -> ResourceLimits
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more