From 9f113bdd950085ff012bfe28576c0f66cb3e1bcb Mon Sep 17 00:00:00 2001 From: Systemcluster Date: Thu, 18 Feb 2021 06:29:37 +0100 Subject: [PATCH] [wgsl] limit allowed for statement initializer statements --- src/front/wgsl/mod.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/front/wgsl/mod.rs b/src/front/wgsl/mod.rs index 120d332baa..1903eb4083 100644 --- a/src/front/wgsl/mod.rs +++ b/src/front/wgsl/mod.rs @@ -62,6 +62,8 @@ pub enum Error<'a> { BadTypeCast(&'a str), #[error(transparent)] InvalidResolve(ResolveError), + #[error("invalid statement {0:?}, expected {1}")] + InvalidStatement(crate::Statement, &'a str), #[error("unknown import: `{0}`")] UnknownImport(&'a str), #[error("unknown storage class: `{0}`")] @@ -1816,7 +1818,19 @@ impl Parser { let initialization = if lexer.skip(Token::Separator(';')) { None } else { - self.parse_statement(lexer, context.reborrow(), is_uniform_control_flow)? + let statement = + self.parse_statement(lexer, context.reborrow(), is_uniform_control_flow)?; + match statement { + Some(crate::Statement::Store { .. }) + | Some(crate::Statement::Call { .. }) => statement, + Some(other) => { + return Err(Error::InvalidStatement( + other, + "variable, assignment or function call", + )) + } + None => None, + } }; let condition = if lexer.skip(Token::Separator(';')) { None