Skip to content

Commit 15b83fe

Browse files
cemonemwucke13
authored andcommitted
fix: validation stack should contain a single type for const exprs
Signed-off-by: Cem Onem <cem.oenem@dlr.de>
1 parent caadeb6 commit 15b83fe

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

src/core/reader/types/element.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ impl ElemType {
132132
// },
133133
// };
134134

135-
valid_stack.assert_pop_val_type(super::ValType::NumType(super::NumType::I32))?;
135+
valid_stack.assert_val_types(&[super::ValType::NumType(super::NumType::I32)])?;
136136

137137
ElemMode::Active(ActiveElem {
138138
table_idx,
@@ -172,6 +172,11 @@ impl ElemType {
172172
Some(functions),
173173
);
174174

175+
// if there are multiple types on the stack, it is invalid
176+
if valid_stack.len() != 1 {
177+
// TODO fix error type
178+
return Err(Error::InvalidValidationStackValType(None));
179+
}
175180
use crate::validation_stack::ValidationStackEntry::*;
176181

177182
if let Some(val) = valid_stack.peek_const_validation_stack() {

src/validation/data.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub(super) fn validate_data_section(
3838
read_constant_expression(wasm, &mut valid_stack, imported_global_types, None)?
3939
};
4040

41-
valid_stack.assert_pop_val_type(ValType::NumType(NumType::I32))?;
41+
valid_stack.assert_val_types(&[ValType::NumType(NumType::I32)])?;
4242

4343
let byte_vec = wasm.read_vec(|el| el.read_u8())?;
4444

@@ -77,7 +77,7 @@ pub(super) fn validate_data_section(
7777
read_constant_expression(wasm, &mut valid_stack, imported_global_types, None)?
7878
};
7979

80-
valid_stack.assert_pop_val_type(ValType::NumType(NumType::I32))?;
80+
valid_stack.assert_val_types(&[ValType::NumType(NumType::I32)])?;
8181

8282
let byte_vec = wasm.read_vec(|el| el.read_u8())?;
8383

src/validation/validation_stack.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ impl ValidationStack {
234234
///
235235
/// - `Ok(())` if all expected valtypes were found
236236
/// - `Err(_)` otherwise
237-
pub(super) fn assert_val_types(&mut self, expected_val_types: &[ValType]) -> Result<()> {
237+
pub fn assert_val_types(&mut self, expected_val_types: &[ValType]) -> Result<()> {
238238
ValidationStack::assert_val_types_with_custom_stacks(
239239
&mut self.stack,
240240
&self.ctrl_stack,

0 commit comments

Comments
 (0)