pub struct Validator { /* private fields */ }
Expand description

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

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.

Configures the enabled WebAssembly features for this Validator.

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.

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.

Validates Payload::Version

source

pub fn module_code_section_entry<'a>(&mut self) -> Validator

Validates Payload::ModuleCodeSectionEntry.

Note that this does not actually perform any validation itself. The ModuleCodeSectionEntry payload is associated with a sub-parser for the sub-module, and it’s expected that the returned Validator will be paired with the Parser otherwise used with the module.

Note that the returned Validator should be used for the nested module. It will correctly work with parent aliases as well as ensure the type of the inline module matches the declared type. Using Validator::new will result in incorrect validation.

source

pub fn code_section_entry(
    &mut self
) -> Result<FuncValidator<ValidatorResources>>

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.

Validates Payload::UnknownSection.

Currently always returns an error.

Validates Payload::End.

Trait Implementations

Returns the “default value” for a type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.