Skip to content

Commit dc42f39

Browse files
authored
Update spec test suite submodule (#1553)
Use the previous support for `WasmFeatures` in a parser to help guide which error messages are generated when reading various sections.
1 parent c1d9ea1 commit dc42f39

5 files changed

Lines changed: 55 additions & 7 deletions

File tree

crates/wasmparser/src/binary_reader.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -290,14 +290,18 @@ impl<'a> BinaryReader<'a> {
290290
fn read_memarg(&mut self, max_align: u8) -> Result<MemArg> {
291291
let flags_pos = self.original_position();
292292
let mut flags = self.read_var_u32()?;
293-
let memory = if flags & (1 << 6) != 0 {
293+
294+
let memory = if self.features.multi_memory() && flags & (1 << 6) != 0 {
294295
flags ^= 1 << 6;
295296
self.read_var_u32()?
296297
} else {
297298
0
298299
};
299300
let align = if flags >= (1 << 6) {
300-
return Err(BinaryReaderError::new("alignment too large", flags_pos));
301+
return Err(BinaryReaderError::new(
302+
"malformed memop flags: alignment too large",
303+
flags_pos,
304+
));
301305
} else {
302306
flags as u8
303307
};

crates/wasmparser/src/validator/operators.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,10 @@ where
729729
fn check_memarg(&self, memarg: MemArg) -> Result<ValType> {
730730
let index_ty = self.check_memory_index(memarg.memory)?;
731731
if memarg.align > memarg.max_align {
732-
bail!(self.offset, "alignment must not be larger than natural");
732+
bail!(
733+
self.offset,
734+
"malformed memop flags: alignment must not be larger than natural"
735+
);
733736
}
734737
if index_ty == ValType::I32 && memarg.offset > u64::from(u32::MAX) {
735738
bail!(self.offset, "offset out of range: must be <= 2**32");

tests/roundtrip.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,8 @@ fn find_tests() -> Vec<PathBuf> {
116116
/// Note that this is used to skip tests for all crates, not just one at a
117117
/// time. There's further filters applied while testing.
118118
fn skip_test(test: &Path, contents: &[u8]) -> bool {
119-
// currently no tests are skipped
120-
let _ = (test, contents);
121-
false
119+
let _ = contents;
120+
test.iter().any(|p| p == "exception-handling") && test.iter().any(|p| p == "legacy")
122121
}
123122

124123
fn skip_validation(_test: &Path) -> bool {

tests/snapshots/testsuite/align.wast.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1813,6 +1813,48 @@
18131813
"value": "0"
18141814
}
18151815
]
1816+
},
1817+
{
1818+
"type": "assert_invalid",
1819+
"line": 873,
1820+
"filename": "align.108.wasm",
1821+
"text": "alignment must not be larger than natural",
1822+
"module_type": "binary"
1823+
},
1824+
{
1825+
"type": "assert_malformed",
1826+
"line": 892,
1827+
"filename": "align.109.wasm",
1828+
"text": "malformed memop flags",
1829+
"module_type": "binary"
1830+
},
1831+
{
1832+
"type": "assert_malformed",
1833+
"line": 911,
1834+
"filename": "align.110.wasm",
1835+
"text": "malformed memop flags",
1836+
"module_type": "binary"
1837+
},
1838+
{
1839+
"type": "assert_malformed",
1840+
"line": 930,
1841+
"filename": "align.111.wasm",
1842+
"text": "malformed memop flags",
1843+
"module_type": "binary"
1844+
},
1845+
{
1846+
"type": "assert_malformed",
1847+
"line": 949,
1848+
"filename": "align.112.wasm",
1849+
"text": "malformed memop flags",
1850+
"module_type": "binary"
1851+
},
1852+
{
1853+
"type": "assert_malformed",
1854+
"line": 968,
1855+
"filename": "align.113.wasm",
1856+
"text": "malformed memop flags",
1857+
"module_type": "binary"
18161858
}
18171859
]
18181860
}

0 commit comments

Comments
 (0)