Path: blob/main/crates/wasi-preview1-component-adapter/verify/src/main.rs
3121 views
use anyhow::{Result, bail};1use std::env;2use wasmparser::*;34fn main() -> Result<()> {5let file = env::args()6.nth(1)7.expect("must pass wasm file as an argument");8let wasm = wat::parse_file(&file)?;910let mut validator = Validator::new();11for payload in Parser::new(0).parse_all(&wasm) {12let payload = payload?;13validator.payload(&payload)?;14match payload {15Payload::Version { encoding, .. } => {16if encoding != Encoding::Module {17bail!("adapter must be a core wasm module, not a component");18}19}20Payload::End(_) => {}21Payload::TypeSection(_) => {}22Payload::ImportSection(s) => {23for i in s.into_imports() {24let i = i?;25match i.ty {26TypeRef::Func(_) => {27if i.module.starts_with("wasi:") {28continue;29}30if i.module == "__main_module__" {31continue;32}33bail!("import from unknown module `{}`", i.module);34}35TypeRef::Table(_) => bail!("should not import table"),36TypeRef::Global(_) => bail!("should not import globals"),37TypeRef::Memory(_) => {}38TypeRef::Tag(_) => bail!("unsupported `tag` type"),39TypeRef::FuncExact(_) => bail!("unsupported exact `func` type"),40}41}42}43Payload::TableSection(_) => {}44Payload::MemorySection(_) => {45bail!("preview1.wasm should import memory");46}47Payload::GlobalSection(_) => {}4849Payload::ExportSection(_) => {}5051Payload::FunctionSection(_) => {}5253Payload::CodeSectionStart { .. } => {}54Payload::CodeSectionEntry(_) => {}55Payload::CustomSection(_) => {}5657// sections that shouldn't appear in the specially-crafted core wasm58// adapter self we're processing59_ => {60bail!("unsupported section {payload:?} found in preview1.wasm")61}62}63}6465Ok(())66}676869