Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions crates/wast/src/ast/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -617,6 +617,11 @@ pub struct ModuleType<'a> {

impl<'a> Parse<'a> for ModuleType<'a> {
fn parse(parser: Parser<'a>) -> Result<Self> {
// See comments in `nested_module.rs` for why this is tested here.
if parser.parens_depth() > 100 {
return Err(parser.error("module type nesting too deep"));
}

let mut imports = Vec::new();
while parser.peek2::<kw::import>() {
imports.push(parser.parens(|p| p.parse())?);
Expand Down Expand Up @@ -658,6 +663,11 @@ pub struct InstanceType<'a> {

impl<'a> Parse<'a> for InstanceType<'a> {
fn parse(parser: Parser<'a>) -> Result<Self> {
// See comments in `nested_module.rs` for why this is tested here.
if parser.parens_depth() > 100 {
return Err(parser.error("instance type nesting too deep"));
}

let mut exports = Vec::new();
while !parser.is_empty() {
exports.push(parser.parens(|p| p.parse())?);
Expand Down
106 changes: 106 additions & 0 deletions tests/local/deep.wast
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
(assert_malformed (module quote

"(import\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
"(export\"\"(instance (export\"\"(instance (export\"\"(instance (export\"\"(instance"
)
"nesting too deep")