Index: test/unittests/wasm/ast-decoder-unittest.cc |
diff --git a/test/unittests/wasm/ast-decoder-unittest.cc b/test/unittests/wasm/ast-decoder-unittest.cc |
index 7311f063a0ad8984ab47808cd8120ecb8dd8decb..dd5a7ab6243929e6078ed68f6b5c2f914ded5ed0 100644 |
--- a/test/unittests/wasm/ast-decoder-unittest.cc |
+++ b/test/unittests/wasm/ast-decoder-unittest.cc |
@@ -238,6 +238,11 @@ TEST_F(AstDecoderTest, GetLocal0_local) { |
EXPECT_VERIFIES(sigs.i_v(), kCodeGetLocal0); |
} |
+TEST_F(AstDecoderTest, TooManyLocals) { |
+ AddLocals(kAstI32, 4034986500); |
+ EXPECT_FAILURE(sigs.i_v(), kCodeGetLocal0); |
+} |
+ |
TEST_F(AstDecoderTest, GetLocal0_param_n) { |
FunctionSig* array[] = {sigs.i_i(), sigs.i_ii(), sigs.i_iii()}; |
@@ -269,8 +274,23 @@ TEST_F(AstDecoderTest, GetLocal_off_end) { |
EXPECT_FAILURE(sigs.i_i(), code); |
} |
+TEST_F(AstDecoderTest, NumLocalBelowLimit) { |
+ AddLocals(kAstI32, kMaxNumWasmLocals - 1); |
+ EXPECT_VERIFIES_INLINE(sigs.v_v(), WASM_NOP); |
+} |
+ |
+TEST_F(AstDecoderTest, NumLocalAtLimit) { |
+ AddLocals(kAstI32, kMaxNumWasmLocals); |
+ EXPECT_VERIFIES_INLINE(sigs.v_v(), WASM_NOP); |
+} |
+ |
+TEST_F(AstDecoderTest, NumLocalAboveLimit) { |
+ AddLocals(kAstI32, kMaxNumWasmLocals + 1); |
+ EXPECT_FAILURE_INLINE(sigs.v_v(), WASM_NOP); |
+} |
+ |
TEST_F(AstDecoderTest, GetLocal_varint) { |
- const int kMaxLocals = 8000000; |
+ const int kMaxLocals = kMaxNumWasmLocals; |
AddLocals(kAstI32, kMaxLocals); |
for (int index = 0; index < kMaxLocals; index = index * 11 + 5) { |