/* * Copyright 2023 WebAssembly Community Group participants * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include "shared-constants.h" #include "support/string.h" #include "wasm-binary.h" #include "wasm-builder.h" #include "wasm-validator.h" #include "gtest/gtest.h" using namespace wasm; // Check that the validator does not crash on missing tags in catch statements // (invalid parse, so cannot be reproduced with Python test suite) TEST(ValidatorTest, MissingCatchTag) { WasmValidator validator; Module module; module.features.enable(FeatureSet::ExceptionHandling); auto tryExp = module.allocator.alloc(); tryExp->name = "tst1"; auto bodyExp = module.allocator.alloc(); bodyExp->value = Literal(1); tryExp->body = bodyExp; tryExp->catchTags.push_back(wasm::Name("foo")); auto catchBodyExp = module.allocator.alloc(); catchBodyExp->value = Literal(2); tryExp->catchBodies.push_back(catchBodyExp); Function function = Function(); function.body = tryExp; WasmValidator::Flags flags = WasmValidator::FlagValues::Globally | WasmValidator::FlagValues::Quiet; EXPECT_FALSE(validator.validate(&function, module, flags)); }