diff --git a/lib/wasm/Cargo.toml b/lib/wasm/Cargo.toml index 15dd4bb342..8cc3b40819 100644 --- a/lib/wasm/Cargo.toml +++ b/lib/wasm/Cargo.toml @@ -11,6 +11,6 @@ license = "Apache-2.0" name = "cton_wasm" [dependencies] -wasmparser = "0.8.2" +wasmparser = "0.9.3" cretonne = { path = "../cretonne" } cretonne-frontend = { path = "../frontend" } diff --git a/lib/wasm/src/sections_translator.rs b/lib/wasm/src/sections_translator.rs index 8c8b7aac71..e2dae0a58c 100644 --- a/lib/wasm/src/sections_translator.rs +++ b/lib/wasm/src/sections_translator.rs @@ -250,7 +250,7 @@ pub fn parse_data_section( ParserState::BeginInitExpressionBody => (), ref s => return Err(SectionParsingError::WrongSectionContent(format!("{:?}", s))), }; - let offset = match *parser.read() { + let mut offset = match *parser.read() { ParserState::InitExpressionOperator(Operator::I32Const { value }) => { if value < 0 { return Err(SectionParsingError::WrongSectionContent(String::from( @@ -288,20 +288,22 @@ pub fn parse_data_section( ParserState::EndInitExpressionBody => (), ref s => return Err(SectionParsingError::WrongSectionContent(format!("{:?}", s))), }; - { + match *parser.read() { + ParserState::BeginDataSectionEntryBody(_) => (), + ref s => return Err(SectionParsingError::WrongSectionContent(format!("{:?}", s))), + }; + loop { let data = match *parser.read() { - ParserState::DataSectionEntryBody(data) => data, + ParserState::DataSectionEntryBodyChunk(data) => data, + ParserState::EndDataSectionEntry => break, ref s => return Err(SectionParsingError::WrongSectionContent(format!("{:?}", s))), }; match runtime.declare_data_initialization(memory_index as MemoryIndex, offset, data) { Ok(()) => (), Err(s) => return Err(SectionParsingError::WrongSectionContent(s)), }; + offset += data.len(); } - match *parser.read() { - ParserState::EndDataSectionEntry => (), - ref s => return Err(SectionParsingError::WrongSectionContent(format!("{:?}", s))), - }; } Ok(()) }