pub enum PathError {
NoPath,
DepthExceeded {
partial_chain: Vec<u32>,
},
NodeOutOfBounds {
node: u32,
node_count: u32,
},
MalformedGraph {
reason: PrepareWitnessGraphError,
fix: String,
},
ResourceExhausted {
field: String,
fix: String,
},
}Expand description
Distinguishable failure modes for extract_path. The launch’s
proof-assembly code maps each variant to a different finding-class
outcome; collapsing every error into None (the prior shape) hid
the depth-overrun case from the caller.
Variants§
NoPath
The IFDS analysis did not reach one of the endpoints; no path exists. Caller should keep the finding at Class 3 (heuristic).
DepthExceeded
A reached, non-sanitized predecessor existed at every step but
the chain exceeded MAX_PATH_DEPTH before reaching the
source. The partial chain (sink-first, length =
MAX_PATH_DEPTH) is returned for diagnostics. Callers must
treat this as an analysis-capacity failure and rerun with a
larger witness budget; returning a downgraded finding would
hide an incomplete proof.
NodeOutOfBounds
seed.source_node or seed.sink_node is out of bounds for
the supplied pg_node_attrs slice. Returned instead of
panicking on visited[current] (audit finding 5).
MalformedGraph
The supplied program-graph CSR is malformed. Witness extraction must fail instead of silently dropping edges, edge kinds, or out-of-range targets because that can manufacture a proof path that the GPU analysis did not actually establish.
Fields
reason: PrepareWitnessGraphErrorStructured reason for the malformed CSR.
ResourceExhausted
Host staging memory for witness extraction could not be reserved. Callers must treat this as an analysis-capacity failure, not as proof that no vulnerable path exists.
Trait Implementations§
impl Eq for PathError
impl StructuralPartialEq for PathError
Auto Trait Implementations§
impl Freeze for PathError
impl RefUnwindSafe for PathError
impl Send for PathError
impl Sync for PathError
impl Unpin for PathError
impl UnsafeUnpin for PathError
impl UnwindSafe for PathError
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§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.