From a069361bf419931376569bb95087510a8a648da7 Mon Sep 17 00:00:00 2001 From: Dzmitry Malyshau Date: Thu, 13 Jan 2022 14:39:00 -0500 Subject: [PATCH] validate: check local var type to be in range --- src/valid/function.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/valid/function.rs b/src/valid/function.rs index 411ef7ce18..d0eeab1b5c 100644 --- a/src/valid/function.rs +++ b/src/valid/function.rs @@ -786,12 +786,17 @@ impl super::Validator { constants: &Arena, ) -> Result<(), LocalVariableError> { log::debug!("var {:?}", var); - if !self.types[var.ty.index()] + let type_info = self + .types + .get(var.ty.index()) + .ok_or(LocalVariableError::InvalidType(var.ty))?; + if !type_info .flags .contains(super::TypeFlags::DATA | super::TypeFlags::SIZED) { return Err(LocalVariableError::InvalidType(var.ty)); } + if let Some(const_handle) = var.init { match constants[const_handle].inner { crate::ConstantInner::Scalar { width, ref value } => {