pub enum VerifyError {
UnknownOpcode {
at: usize,
byte: u8,
},
ConstOutOfRange {
at: usize,
index: u32,
len: usize,
},
FunctionOutOfRange {
at: usize,
index: u32,
len: usize,
},
JumpOutOfRange {
at: usize,
target: i64,
len: usize,
},
EmptyFunctionTable,
EntryOutOfRange {
function: usize,
entry: u32,
len: usize,
},
ArityExceedsRegisters {
function: usize,
arity: u8,
num_registers: u8,
},
ForbiddenConstant {
index: usize,
kind: ConstantKind,
},
}Expand description
Why a Chunk failed verification.
The verifier’s job is to make every fact the interpreter’s hot loop
relies on (jump targets in range, constant/function indices in range)
true before a single instruction runs, so byteflow-vm never has to
re-check them per-step. Skipping this on trusted, compiler-generated
bytecode is fine; it is mandatory before loading anything that crossed a
trust boundary (a plugin, a network-fetched module, see design notes
§24 capability/sandboxing).
Variants§
UnknownOpcode
ConstOutOfRange
FunctionOutOfRange
JumpOutOfRange
EmptyFunctionTable
EntryOutOfRange
ArityExceedsRegisters
A function declares more parameters than it has registers to hold
them. The VM loads r0..arity on entry, so this makes the very first
thing a call does — copying arguments in — reach past the register
file. Cheap to settle here: it is a static property of the function
table, one comparison per function, and no amount of runtime checking
makes such a function callable.
ForbiddenConstant
Untrusted chunk embedded a Cap, Pid, or Message in the constant pool.
Trait Implementations§
Source§impl Clone for VerifyError
impl Clone for VerifyError
Source§fn clone(&self) -> VerifyError
fn clone(&self) -> VerifyError
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for VerifyError
impl Debug for VerifyError
Source§impl Display for VerifyError
impl Display for VerifyError
impl Eq for VerifyError
Source§impl Error for VerifyError
impl Error for VerifyError
1.30.0 · 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()
Source§impl PartialEq for VerifyError
impl PartialEq for VerifyError
impl StructuralPartialEq for VerifyError
Auto Trait Implementations§
impl Freeze for VerifyError
impl RefUnwindSafe for VerifyError
impl Send for VerifyError
impl Sync for VerifyError
impl Unpin for VerifyError
impl UnsafeUnpin for VerifyError
impl UnwindSafe for VerifyError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.