Skip to content

Commit ab0f885

Browse files
committed
Parse and validate wasm before static analysis
1 parent 1fb845d commit ab0f885

File tree

6 files changed

+160
-241
lines changed

6 files changed

+160
-241
lines changed

packages/vm/src/cache.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ use crate::errors::{VmError, VmResult};
1414
use crate::filesystem::mkdir_p;
1515
use crate::instance::{Instance, InstanceOptions};
1616
use crate::modules::{CachedModule, FileSystemCache, InMemoryCache, PinnedMemoryCache};
17+
use crate::parsed_wasm::ParsedWasm;
1718
use crate::size::Size;
18-
use crate::static_analysis::{deserialize_exports, has_ibc_entry_points};
19+
use crate::static_analysis::has_ibc_entry_points;
1920
use crate::wasm_backend::{compile, make_compiling_engine, make_runtime_engine};
2021

2122
const STATE_DIR: &str = "state";
@@ -254,7 +255,7 @@ where
254255
pub fn analyze(&self, checksum: &Checksum) -> VmResult<AnalysisReport> {
255256
// Here we could use a streaming deserializer to slightly improve performance. However, this way it is DRYer.
256257
let wasm = self.load_wasm(checksum)?;
257-
let module = deserialize_exports(&wasm)?;
258+
let module = ParsedWasm::parse(&wasm)?;
258259
Ok(AnalysisReport {
259260
has_ibc_entry_points: has_ibc_entry_points(&module),
260261
required_capabilities: required_capabilities_from_module(&module),
@@ -571,10 +572,7 @@ mod tests {
571572
let save_result = cache.save_wasm(&wasm);
572573
match save_result.unwrap_err() {
573574
VmError::StaticValidationErr { msg, .. } => {
574-
assert_eq!(
575-
msg,
576-
"Wasm contract missing a required marker export: interface_version_*"
577-
)
575+
assert_eq!(msg, "Wasm contract must contain exactly one memory")
578576
}
579577
e => panic!("Unexpected error {e:?}"),
580578
}

packages/vm/src/capabilities.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ pub fn required_capabilities_from_module(module: impl ExportInfo) -> HashSet<Str
3232

3333
#[cfg(test)]
3434
mod tests {
35+
use crate::parsed_wasm::ParsedWasm;
36+
3537
use super::*;
36-
use crate::static_analysis::deserialize_exports;
3738

3839
#[test]
3940
fn capabilities_from_csv_works() {
@@ -73,7 +74,7 @@ mod tests {
7374
)"#,
7475
)
7576
.unwrap();
76-
let module = deserialize_exports(&wasm).unwrap();
77+
let module = ParsedWasm::parse(&wasm).unwrap();
7778

7879
let required_capabilities = required_capabilities_from_module(&module);
7980
assert_eq!(required_capabilities.len(), 3);
@@ -85,7 +86,7 @@ mod tests {
8586
#[test]
8687
fn required_capabilities_from_module_works_without_exports_section() {
8788
let wasm = wat::parse_str(r#"(module)"#).unwrap();
88-
let module = deserialize_exports(&wasm).unwrap();
89+
let module = ParsedWasm::parse(&wasm).unwrap();
8990
let required_capabilities = required_capabilities_from_module(&module);
9091
assert_eq!(required_capabilities.len(), 0);
9192
}

0 commit comments

Comments
 (0)