update wasm-parser dep; use it for validation

This commit is contained in:
Mark McCaskey
2019-04-03 17:21:57 -07:00
parent 2ac7b6408c
commit bda5b19098
5 changed files with 19 additions and 15 deletions

View File

@@ -93,13 +93,18 @@ pub fn compile_with_config(
/// WebAssembly specification. Returns `true` if validation
/// succeeded, `false` if validation failed.
pub fn validate(wasm: &[u8]) -> bool {
validate_and_report_errors(wasm).is_ok()
}
/// The same as `validate` but with an Error message on failure
pub fn validate_and_report_errors(wasm: &[u8]) -> ::std::result::Result<(), String> {
use wasmparser::WasmDecoder;
let mut parser = wasmparser::ValidatingParser::new(wasm, None);
loop {
let state = parser.read();
match *state {
wasmparser::ParserState::EndWasm => break true,
wasmparser::ParserState::Error(_) => break false,
wasmparser::ParserState::EndWasm => break Ok(()),
wasmparser::ParserState::Error(e) => break Err(format!("{}", e)),
_ => {}
}
}

View File

@@ -73,7 +73,7 @@ impl ModuleInfo {
let len = reader.bytes_remaining();
let bytes = reader.read_bytes(len)?;
let data = bytes.to_vec();
let name = String::from_utf8_lossy(name).to_string();
let name = name.to_string();
self.custom_sections.insert(name, data);
}
}