diff --git a/Userland/Libraries/LibWasm/AbstractMachine/Validator.cpp b/Userland/Libraries/LibWasm/AbstractMachine/Validator.cpp index 3795ce2b54..58b72a0abc 100644 --- a/Userland/Libraries/LibWasm/AbstractMachine/Validator.cpp +++ b/Userland/Libraries/LibWasm/AbstractMachine/Validator.cpp @@ -282,12 +282,12 @@ ErrorOr Validator::validate(CodeSection const& section) ErrorOr Validator::validate(TableType const& type) { - return validate(type.limits(), 32); + return validate(type.limits(), (1ull << 32) - 1); } ErrorOr Validator::validate(MemoryType const& type) { - return validate(type.limits(), 16); + return validate(type.limits(), 1 << 16); } ErrorOr Validator::validate(BlockType const& type) @@ -309,9 +309,8 @@ ErrorOr Validator::validate(BlockType const& type return Errors::invalid("BlockType"sv); } -ErrorOr Validator::validate(Limits const& limits, size_t k) +ErrorOr Validator::validate(Limits const& limits, u64 bound) { - auto bound = (1ull << k) - 1; auto check_bound = [bound](auto value) { return static_cast(value) <= bound; }; @@ -319,8 +318,9 @@ ErrorOr Validator::validate(Limits const& limits, size_t if (!check_bound(limits.min())) return Errors::out_of_bounds("limit minimum"sv, limits.min(), 0, bound); - if (limits.max().has_value() && (limits.max().value() < limits.min() || !check_bound(*limits.max()))) + if (limits.max().has_value() && (limits.max().value() < limits.min() || !check_bound(*limits.max()))) { return Errors::out_of_bounds("limit maximum"sv, limits.max().value(), limits.min(), bound); + } return {}; } diff --git a/Userland/Libraries/LibWasm/AbstractMachine/Validator.h b/Userland/Libraries/LibWasm/AbstractMachine/Validator.h index 7e69b0ae33..2cd96730d6 100644 --- a/Userland/Libraries/LibWasm/AbstractMachine/Validator.h +++ b/Userland/Libraries/LibWasm/AbstractMachine/Validator.h @@ -254,7 +254,7 @@ public: ErrorOr validate_instruction(Instruction const&, Stack& stack, bool& is_constant); // Types - ErrorOr validate(Limits const&, size_t k); // n <= 2^k-1 && m? <= 2^k-1 + ErrorOr validate(Limits const&, u64 bound); // n <= bound && m? <= bound ErrorOr validate(BlockType const&); ErrorOr validate(FunctionType const&) { return {}; } ErrorOr validate(TableType const&);