Struct wasmtime_environ::wasm::wasmparser::Validator [−][src]
Validator for a WebAssembly binary module.
This structure encapsulates state necessary to validate a WebAssembly
binary. This implements validation as defined by the core
specification. A Validator
is designed, like
Parser
, to accept incremental input over time.
Additionally a Validator
is also designed for parallel validation of
functions as they are received.
It’s expected that you’ll be using a Parser
in tandem with a
Validator
. As each Payload
is received from a
Parser
you’ll pass it into a Validator
to test the validity of the
payload. Note that all payloads received from a Parser
are expected to
be passed to a Validator
. For example if you receive
Payload::TypeSection
you’ll call
Validator::type_section
to validate this.
The design of Validator
is intended that you’ll interleave, in your own
application’s processing, calls to validation. Each variant, after it’s
received, will be validated and then your application would proceed as
usual. At all times, however, you’ll have access to the Validator
and
the validation context up to that point. This enables applications to check
the types of functions and learn how many globals there are, for example.
Implementations
impl Validator
[src]
pub fn new() -> Validator
[src]
Creates a new Validator
ready to validate a WebAssembly module.
The new validator will receive payloads parsed from
Parser
, and expects the first payload received to be
the version header from the parser.
pub fn wasm_features(&mut self, features: WasmFeatures) -> &mut Validator
[src]
Configures the enabled WebAssembly features for this Validator
.
pub fn validate_all(&mut self, bytes: &[u8]) -> Result<(), BinaryReaderError>
[src]
Validates an entire in-memory module with this validator.
This function will internally create a Parser
to parse the bytes
provided. The entire wasm module specified by bytes
will be parsed and
validated. Parse and validation errors will be returned through
Err(_)
, and otherwise a successful validation means Ok(())
is
returned.
pub fn payload(
&mut self,
payload: &Payload<'a>
) -> Result<ValidPayload<'a>, BinaryReaderError>
[src]
&mut self,
payload: &Payload<'a>
) -> Result<ValidPayload<'a>, BinaryReaderError>
Convenience function to validate a single Payload
.
This function is intended to be used as a convenience. It will
internally perform any validation necessary to validate the Payload
provided. The convenience part is that you’re likely already going to
be matching on Payload
in your application, at which point it’s more
appropriate to call the individual methods on Validator
per-variant
in Payload
, such as Validator::type_section
.
This function returns a ValidPayload
variant on success, indicating
one of a few possible actions that need to be taken after a payload is
validated. For example function contents are not validated here, they’re
returned through ValidPayload
for validation by the caller.
pub fn version(
&mut self,
num: u32,
range: &Range
) -> Result<(), BinaryReaderError>
[src]
&mut self,
num: u32,
range: &Range
) -> Result<(), BinaryReaderError>
Validates Payload::Version
pub fn type_section(
&mut self,
section: &TypeSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &TypeSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::TypeSection
pub fn import_section(
&mut self,
section: &ImportSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &ImportSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::ImportSection
pub fn module_section_start(
&mut self,
count: u32,
range: &Range
) -> Result<(), BinaryReaderError>
[src]
&mut self,
count: u32,
range: &Range
) -> Result<(), BinaryReaderError>
Validates Payload::ModuleSectionStart
pub fn module_section_entry(&mut self)
[src]
Validates Payload::ModuleSectionEntry
.
Note that this does not actually perform any validation itself. The
ModuleSectionEntry
payload is associated with a sub-parser for the
sub-module, and it’s expected that the events from the Parser
are fed into this validator.
pub fn alias_section(
&mut self,
section: &AliasSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &AliasSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::AliasSection
pub fn instance_section(
&mut self,
section: &InstanceSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &InstanceSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::InstanceSection
pub fn function_section(
&mut self,
section: &FunctionSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &FunctionSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::FunctionSection
pub fn table_section(
&mut self,
section: &TableSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &TableSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::TableSection
pub fn memory_section(
&mut self,
section: &MemorySectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &MemorySectionReader<'_>
) -> Result<(), BinaryReaderError>
pub fn event_section(
&mut self,
section: &EventSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &EventSectionReader<'_>
) -> Result<(), BinaryReaderError>
pub fn global_section(
&mut self,
section: &GlobalSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &GlobalSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::GlobalSection
pub fn export_section(
&mut self,
section: &ExportSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &ExportSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::ExportSection
pub fn start_section(
&mut self,
func: u32,
range: &Range
) -> Result<(), BinaryReaderError>
[src]
&mut self,
func: u32,
range: &Range
) -> Result<(), BinaryReaderError>
Validates Payload::StartSection
pub fn element_section(
&mut self,
section: &ElementSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &ElementSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::ElementSection
pub fn data_count_section(
&mut self,
count: u32,
range: &Range
) -> Result<(), BinaryReaderError>
[src]
&mut self,
count: u32,
range: &Range
) -> Result<(), BinaryReaderError>
Validates Payload::DataCountSection
pub fn code_section_start(
&mut self,
count: u32,
range: &Range
) -> Result<(), BinaryReaderError>
[src]
&mut self,
count: u32,
range: &Range
) -> Result<(), BinaryReaderError>
Validates Payload::CodeSectionStart
.
pub fn code_section_entry(
&mut self
) -> Result<FuncValidator<ValidatorResources>, BinaryReaderError>
[src]
&mut self
) -> Result<FuncValidator<ValidatorResources>, BinaryReaderError>
Validates Payload::CodeSectionEntry
.
This function will prepare a FuncValidator
which can be used to
validate the function. The function body provided will be parsed only
enough to create the function validation context. After this the
OperatorsReader
returned can be used to read the
opcodes of the function as well as feed information into the validator.
Note that the returned FuncValidator
is “connected” to this
Validator
in that it uses the internal context of this validator for
validating the function. The FuncValidator
can be sent to
another thread, for example, to offload actual processing of functions
elsewhere.
pub fn data_section(
&mut self,
section: &DataSectionReader<'_>
) -> Result<(), BinaryReaderError>
[src]
&mut self,
section: &DataSectionReader<'_>
) -> Result<(), BinaryReaderError>
Validates Payload::DataSection
.
pub fn unknown_section(
&mut self,
id: u8,
range: &Range
) -> Result<(), BinaryReaderError>
[src]
&mut self,
id: u8,
range: &Range
) -> Result<(), BinaryReaderError>
Validates Payload::UnknownSection
.
Currently always returns an error.
pub fn end(&mut self) -> Result<(), BinaryReaderError>
[src]
Validates Payload::End
.
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for Validator
impl Send for Validator
impl Sync for Validator
impl Unpin for Validator
impl UnwindSafe for Validator
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,