From b146c2114751b8328be0e0a8ae3a4c48a97f16c7 Mon Sep 17 00:00:00 2001 From: Sergey Pepyakin Date: Tue, 5 Dec 2017 16:51:26 +0100 Subject: [PATCH] validate element section --- src/validation/mod.rs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/validation/mod.rs b/src/validation/mod.rs index 9ab2ff0..008bc02 100644 --- a/src/validation/mod.rs +++ b/src/validation/mod.rs @@ -131,7 +131,6 @@ pub fn validate_module(module: &Module) -> Result { return Err(Error(format!("too many memory regions in index space: {}", context.memories().len()))); } - // use data section to initialize linear memory regions if let Some(data_section) = module.data_section() { for data_segment in data_section.entries() { @@ -143,7 +142,21 @@ pub fn validate_module(module: &Module) -> Result { } } - // TODO: element section + // use element section to fill tables + if let Some(element_section) = module.elements_section() { + for element_segment in element_section.entries() { + context.require_table(element_segment.index())?; + + let init_ty = element_segment.offset().expr_const_type(context.globals())?; + if init_ty != ValueType::I32 { + return Err(Error(format!("segment offset should return I32"))); + } + + for function_index in element_segment.members() { + context.require_function(*function_index)?; + } + } + } let ModuleContext { types,