#[non_exhaustive]pub enum EvaluationError {
BufferOverrun {
offset: usize,
},
InvalidOffset {
offset: i64,
},
UnsupportedType {
type_name: String,
},
RecursionLimitExceeded {
depth: u32,
},
StringLengthExceeded {
length: usize,
max_length: usize,
},
InvalidStringEncoding {
offset: usize,
},
Timeout {
timeout_ms: u64,
},
TypeReadError(TypeReadError),
InvalidValueTransform {
reason: String,
},
UnknownName {
name: String,
},
InternalError {
message: String,
},
IndirectWithoutEnvironment,
}Expand description
Errors that can occur during rule evaluation.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
BufferOverrun
Buffer overrun during file reading.
InvalidOffset
Invalid offset calculation.
UnsupportedType
Unsupported type during evaluation.
RecursionLimitExceeded
Recursion limit exceeded during evaluation.
StringLengthExceeded
String length limit exceeded.
InvalidStringEncoding
Invalid string encoding.
Timeout
Evaluation timeout exceeded.
TypeReadError(TypeReadError)
Type reading error during evaluation.
InvalidValueTransform
A pre-comparison ValueTransform (type+N, type/N, etc.) failed
to apply: division/modulo by zero, integer overflow, or any other
arithmetic failure produced by apply_value_transform. This is a
recoverable per-rule failure (the engine’s graceful-skip path
drops the rule and continues), not a programming bug – a
magic-file author who writes lequad*1000000 against a buffer
where the read value overflows triggers this and the rest of the
rule set still runs.
§Examples
use libmagic_rs::error::EvaluationError;
let error = EvaluationError::InvalidValueTransform {
reason: "Mul(2) overflow on 18446744073709551615".to_string(),
};
assert!(matches!(error, EvaluationError::InvalidValueTransform { .. }));Fields
UnknownName
A use directive referenced a name not present in the name table.
The evaluator currently handles this condition with a warn! log
plus Ok(vec![]) for backward compatibility with magic files that
invoke subroutines defined in another magic file. This variant is
reserved for consumers that opt in to strict-mode evaluation where
an unknown-name reference should abort the run.
§Examples
use libmagic_rs::error::EvaluationError;
let error = EvaluationError::UnknownName {
name: "missing_sub".to_string(),
};
assert!(matches!(error, EvaluationError::UnknownName { .. }));InternalError
Internal error indicating a bug in the evaluation logic.
IndirectWithoutEnvironment
An indirect directive was evaluated without a rule environment
attached to the crate::evaluator::EvaluationContext.
MetaType::Indirect re-evaluates the entire root rule list at the
resolved offset. Without a [crate::evaluator::RuleEnvironment] (the
shared root rules + name table) the engine has nothing to re-enter,
so the directive is a no-op. This variant is reserved for consumers
that opt in to strict-mode evaluation where the misconfiguration
should abort the run; the default engine path logs at debug! and
returns Ok(vec![]) for backward compatibility with low-level
programmatic callers (tests, fuzz harnesses) that intentionally run
without a MagicDatabase-attached environment, mirroring the
Use-without-env contract.
§Examples
use libmagic_rs::error::EvaluationError;
let error = EvaluationError::indirect_without_environment();
assert!(matches!(error, EvaluationError::IndirectWithoutEnvironment));Implementations§
Source§impl EvaluationError
impl EvaluationError
Sourcepub fn buffer_overrun(offset: usize) -> Self
pub fn buffer_overrun(offset: usize) -> Self
Create a new BufferOverrun error.
Sourcepub fn invalid_offset(offset: i64) -> Self
pub fn invalid_offset(offset: i64) -> Self
Create a new InvalidOffset error.
Sourcepub fn unsupported_type(type_name: impl Into<String>) -> Self
pub fn unsupported_type(type_name: impl Into<String>) -> Self
Create a new UnsupportedType error.
Sourcepub fn recursion_limit_exceeded(depth: u32) -> Self
pub fn recursion_limit_exceeded(depth: u32) -> Self
Create a new RecursionLimitExceeded error.
Sourcepub fn string_length_exceeded(length: usize, max_length: usize) -> Self
pub fn string_length_exceeded(length: usize, max_length: usize) -> Self
Create a new StringLengthExceeded error.
Sourcepub fn invalid_string_encoding(offset: usize) -> Self
pub fn invalid_string_encoding(offset: usize) -> Self
Create a new InvalidStringEncoding error.
Sourcepub fn internal_error(message: impl Into<String>) -> Self
pub fn internal_error(message: impl Into<String>) -> Self
Create a new InternalError error.
Sourcepub const fn indirect_without_environment() -> Self
pub const fn indirect_without_environment() -> Self
Create a new IndirectWithoutEnvironment error.
Trait Implementations§
Source§impl Debug for EvaluationError
impl Debug for EvaluationError
Source§impl Display for EvaluationError
impl Display for EvaluationError
Source§impl Error for EvaluationError
impl Error for EvaluationError
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()