Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Side by Side Diff: test/unittests/wasm/module-decoder-unittest.cc

Issue 2574133002: [wasm] Enforce limits for maximums for many WebAssembly binary entities. (Closed)
Patch Set: Address review comments. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/unittests/wasm/ast-decoder-unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "test/unittests/test-utils.h" 5 #include "test/unittests/test-utils.h"
6 6
7 #include "src/handles.h" 7 #include "src/handles.h"
8 #include "src/objects-inl.h" 8 #include "src/objects-inl.h"
9 #include "src/wasm/module-decoder.h" 9 #include "src/wasm/module-decoder.h"
10 #include "src/wasm/wasm-limits.h"
10 #include "src/wasm/wasm-macro-gen.h" 11 #include "src/wasm/wasm-macro-gen.h"
11 #include "src/wasm/wasm-opcodes.h" 12 #include "src/wasm/wasm-opcodes.h"
12 13
13 namespace v8 { 14 namespace v8 {
14 namespace internal { 15 namespace internal {
15 namespace wasm { 16 namespace wasm {
16 17
17 #define WASM_INIT_EXPR_I32V_1(val) WASM_I32V_1(val), kExprEnd 18 #define WASM_INIT_EXPR_I32V_1(val) WASM_I32V_1(val), kExprEnd
18 #define WASM_INIT_EXPR_I32V_2(val) WASM_I32V_2(val), kExprEnd 19 #define WASM_INIT_EXPR_I32V_2(val) WASM_I32V_2(val), kExprEnd
19 #define WASM_INIT_EXPR_I32V_3(val) WASM_I32V_3(val), kExprEnd 20 #define WASM_INIT_EXPR_I32V_3(val) WASM_I32V_3(val), kExprEnd
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 } 304 }
304 } 305 }
305 306
306 TEST_F(WasmModuleVerifyTest, NGlobals) { 307 TEST_F(WasmModuleVerifyTest, NGlobals) {
307 static const byte data[] = { 308 static const byte data[] = {
308 kLocalF32, // memory type 309 kLocalF32, // memory type
309 0, // immutable 310 0, // immutable
310 WASM_INIT_EXPR_F32(7.7), // init 311 WASM_INIT_EXPR_F32(7.7), // init
311 }; 312 };
312 313
313 for (uint32_t i = 0; i < 1000000; i = i * 13 + 1) { 314 for (uint32_t i = 0; i < kV8MaxWasmGlobals; i = i * 13 + 1) {
314 std::vector<byte> buffer; 315 std::vector<byte> buffer;
315 size_t size = SizeOfVarInt(i) + i * sizeof(data); 316 size_t size = SizeOfVarInt(i) + i * sizeof(data);
316 const byte globals[] = {kGlobalSectionCode, U32V_5(size)}; 317 const byte globals[] = {kGlobalSectionCode, U32V_5(size)};
317 for (size_t g = 0; g != sizeof(globals); ++g) { 318 for (size_t g = 0; g != sizeof(globals); ++g) {
318 buffer.push_back(globals[g]); 319 buffer.push_back(globals[g]);
319 } 320 }
320 AppendUint32v(buffer, i); // Number of globals. 321 AppendUint32v(buffer, i); // Number of globals.
321 for (uint32_t j = 0; j < i; j++) { 322 for (uint32_t j = 0; j < i; j++) {
322 buffer.insert(buffer.end(), data, data + sizeof(data)); 323 buffer.insert(buffer.end(), data, data + sizeof(data));
323 } 324 }
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 841
841 EXPECT_TRUE(sig != nullptr); 842 EXPECT_TRUE(sig != nullptr);
842 EXPECT_EQ(2u, sig->parameter_count()); 843 EXPECT_EQ(2u, sig->parameter_count());
843 EXPECT_EQ(1u, sig->return_count()); 844 EXPECT_EQ(1u, sig->return_count());
844 EXPECT_EQ(p0_type.type, sig->GetParam(0)); 845 EXPECT_EQ(p0_type.type, sig->GetParam(0));
845 EXPECT_EQ(p1_type.type, sig->GetParam(1)); 846 EXPECT_EQ(p1_type.type, sig->GetParam(1));
846 } 847 }
847 } 848 }
848 } 849 }
849 850
851 TEST_F(WasmSignatureDecodeTest, TooManyParams) {
852 static const byte data[] = {kWasmFunctionTypeForm,
853 WASM_I32V_3(kV8MaxWasmFunctionParams + 1),
854 kLocalI32, 0};
855 FunctionSig* sig =
856 DecodeWasmSignatureForTesting(zone(), data, data + sizeof(data));
857 EXPECT_FALSE(sig != nullptr);
858 }
859
860 TEST_F(WasmSignatureDecodeTest, TooManyReturns) {
861 bool prev = FLAG_wasm_mv_prototype;
862 for (int i = 0; i < 2; i++) {
863 FLAG_wasm_mv_prototype = i != 0;
864 const int max_return_count =
865 static_cast<int>(FLAG_wasm_mv_prototype ? kV8MaxWasmFunctionMultiReturns
866 : kV8MaxWasmFunctionReturns);
867 byte data[] = {kWasmFunctionTypeForm, 0, WASM_I32V_3(max_return_count + 1),
868 kLocalI32};
869 FunctionSig* sig =
870 DecodeWasmSignatureForTesting(zone(), data, data + sizeof(data));
871 EXPECT_EQ(nullptr, sig);
872 FLAG_wasm_mv_prototype = prev;
873 }
874 }
875
850 TEST_F(WasmSignatureDecodeTest, Fail_off_end) { 876 TEST_F(WasmSignatureDecodeTest, Fail_off_end) {
851 byte data[256]; 877 byte data[256];
852 for (int p = 0; p <= 255; p = p + 1 + p * 3) { 878 for (int p = 0; p <= 255; p = p + 1 + p * 3) {
853 for (int i = 0; i <= p; i++) data[i] = kLocalI32; 879 for (int i = 0; i <= p; i++) data[i] = kLocalI32;
854 data[0] = static_cast<byte>(p); 880 data[0] = static_cast<byte>(p);
855 881
856 for (int i = 0; i < p + 1; i++) { 882 for (int i = 0; i < p + 1; i++) {
857 // Should fall off the end for all signatures. 883 // Should fall off the end for all signatures.
858 FunctionSig* sig = DecodeWasmSignatureForTesting(zone(), data, data + i); 884 FunctionSig* sig = DecodeWasmSignatureForTesting(zone(), data, data + i);
859 EXPECT_EQ(nullptr, sig); 885 EXPECT_EQ(nullptr, sig);
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after
1478 SECTION(Unknown, 4), 1, 'X', 17, 18, // -- 1504 SECTION(Unknown, 4), 1, 'X', 17, 18, // --
1479 SECTION(Unknown, 9), 3, 'f', 'o', 'o', 5, 6, 7, 8, 9, // -- 1505 SECTION(Unknown, 9), 3, 'f', 'o', 'o', 5, 6, 7, 8, 9, // --
1480 SECTION(Unknown, 8), 5, 'o', 't', 'h', 'e', 'r', 7, 8, // -- 1506 SECTION(Unknown, 8), 5, 'o', 't', 'h', 'e', 'r', 7, 8, // --
1481 }; 1507 };
1482 EXPECT_VERIFIES(data); 1508 EXPECT_VERIFIES(data);
1483 } 1509 }
1484 1510
1485 } // namespace wasm 1511 } // namespace wasm
1486 } // namespace internal 1512 } // namespace internal
1487 } // namespace v8 1513 } // namespace v8
OLDNEW
« no previous file with comments | « test/unittests/wasm/ast-decoder-unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698