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

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

Issue 1974933002: [wasm] Remove the use of the "external" bit on OldFunctions section. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove unused variable. Created 4 years, 7 months 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/wasm/module-decoder.h" 7 #include "src/wasm/module-decoder.h"
8 #include "src/wasm/wasm-macro-gen.h" 8 #include "src/wasm/wasm-macro-gen.h"
9 #include "src/wasm/wasm-opcodes.h" 9 #include "src/wasm/wasm-opcodes.h"
10 10
11 namespace v8 { 11 namespace v8 {
12 namespace internal { 12 namespace internal {
13 namespace wasm { 13 namespace wasm {
14 14
15 #define EMPTY_FUNCTION(sig_index) 0, SIG_INDEX(sig_index), U16_LE(0) 15 #define EMPTY_FUNCTION(sig_index) 0, SIG_INDEX(sig_index), U16_LE(0)
16 #define EMPTY_FUNCTION_SIZE ((size_t)5) 16 #define SIZEOF_EMPTY_FUNCTION ((size_t)5)
17 #define EMPTY_BODY 0 17 #define EMPTY_BODY 0
18 #define SIZEOF_EMPTY_BODY ((size_t)1) 18 #define SIZEOF_EMPTY_BODY ((size_t)1)
19 #define NOP_BODY 2, 0, kExprNop 19 #define NOP_BODY 2, 0, kExprNop
20 #define SIZEOF_NOP_BODY ((size_t)3) 20 #define SIZEOF_NOP_BODY ((size_t)3)
21 21
22 #define SIG_ENTRY_i_i SIG_ENTRY_x_x(kLocalI32, kLocalI32) 22 #define SIG_ENTRY_i_i SIG_ENTRY_x_x(kLocalI32, kLocalI32)
23 23
24 #define UNKNOWN_EMPTY_SECTION_NAME 1, '\0' 24 #define UNKNOWN_EMPTY_SECTION_NAME 1, '\0'
25 #define UNKNOWN_SECTION_NAME 4, 'l', 'u', 'l', 'z' 25 #define UNKNOWN_SECTION_NAME 4, 'l', 'u', 'l', 'z'
26 26
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 // func#0 ------------------------------------------------------ 327 // func#0 ------------------------------------------------------
328 SIG_INDEX(0), // signature index 328 SIG_INDEX(0), // signature index
329 NO_NAME, // name length 329 NO_NAME, // name length
330 U32_LE(0), // code start offset 330 U32_LE(0), // code start offset
331 U32_LE(0), // code end offset 331 U32_LE(0), // code end offset
332 U16_LE(899), // local int32 count 332 U16_LE(899), // local int32 count
333 U16_LE(799), // local int64 count 333 U16_LE(799), // local int64 count
334 U16_LE(699), // local float32 count 334 U16_LE(699), // local float32 count
335 U16_LE(599), // local float64 count 335 U16_LE(599), // local float64 count
336 0, // exported 336 0, // exported
337 1 // external 337 0 // external
338 }; 338 };
339 339
340 ModuleResult result = DecodeModule(data, data + arraysize(data)); 340 ModuleResult result = DecodeModule(data, data + arraysize(data));
341 EXPECT_FALSE(result.ok()); 341 EXPECT_FALSE(result.ok());
342 if (result.val) delete result.val; 342 if (result.val) delete result.val;
343 } 343 }
344 344
345 TEST_F(WasmModuleVerifyTest, OneEmptyVoidVoidFunction) { 345 TEST_F(WasmModuleVerifyTest, OneEmptyVoidVoidFunction) {
346 const int kCodeStartOffset = 49; 346 const int kCodeStartOffset = 49;
347 const int kCodeEndOffset = kCodeStartOffset + 1; 347 const int kCodeEndOffset = kCodeStartOffset + 1;
(...skipping 30 matching lines...) Expand all
378 EXPECT_EQ(2, function->name_length); 378 EXPECT_EQ(2, function->name_length);
379 EXPECT_EQ(kCodeStartOffset, function->code_start_offset); 379 EXPECT_EQ(kCodeStartOffset, function->code_start_offset);
380 EXPECT_EQ(kCodeEndOffset, function->code_end_offset); 380 EXPECT_EQ(kCodeEndOffset, function->code_end_offset);
381 381
382 EXPECT_EQ(1466, function->local_i32_count); 382 EXPECT_EQ(1466, function->local_i32_count);
383 EXPECT_EQ(1355, function->local_i64_count); 383 EXPECT_EQ(1355, function->local_i64_count);
384 EXPECT_EQ(1244, function->local_f32_count); 384 EXPECT_EQ(1244, function->local_f32_count);
385 EXPECT_EQ(1133, function->local_f64_count); 385 EXPECT_EQ(1133, function->local_f64_count);
386 386
387 EXPECT_TRUE(function->exported); 387 EXPECT_TRUE(function->exported);
388 EXPECT_FALSE(function->external);
389 388
390 if (result.val) delete result.val; 389 if (result.val) delete result.val;
391 } 390 }
392 391
393 EXPECT_OFF_END_FAILURE(data, 16, sizeof(data)); 392 EXPECT_OFF_END_FAILURE(data, 16, sizeof(data));
394 } 393 }
395 394
396 TEST_F(WasmModuleVerifyTest, OneFunctionImported) {
397 static const byte data[] = {
398 // signatures
399 SIGNATURES_SECTION_VOID_VOID,
400 // functions
401 SECTION(OLD_FUNCTIONS, 4), 1,
402 // func#0 ------------------------------------------------------
403 kDeclFunctionImport, // no name, no locals, imported
404 SIG_INDEX(0),
405 };
406
407 ModuleResult result = DecodeModule(data, data + arraysize(data));
408 EXPECT_OK(result);
409 EXPECT_EQ(1, result.val->functions.size());
410 WasmFunction* function = &result.val->functions.back();
411
412 EXPECT_EQ(0, function->name_length);
413 EXPECT_EQ(0, function->code_start_offset);
414 EXPECT_EQ(0, function->code_end_offset);
415
416 EXPECT_EQ(0, function->local_i32_count);
417 EXPECT_EQ(0, function->local_i64_count);
418 EXPECT_EQ(0, function->local_f32_count);
419 EXPECT_EQ(0, function->local_f64_count);
420
421 EXPECT_FALSE(function->exported);
422 EXPECT_TRUE(function->external);
423
424 if (result.val) delete result.val;
425 }
426
427 TEST_F(WasmModuleVerifyTest, OneFunctionWithNopBody) { 395 TEST_F(WasmModuleVerifyTest, OneFunctionWithNopBody) {
428 static const byte kCodeStartOffset = 38; 396 static const byte kCodeStartOffset = 38;
429 static const byte kCodeEndOffset = kCodeStartOffset + 1; 397 static const byte kCodeEndOffset = kCodeStartOffset + 1;
430 398
431 static const byte data[] = { 399 static const byte data[] = {
432 SIGNATURES_SECTION_VOID_VOID, // -- 400 SIGNATURES_SECTION_VOID_VOID, // --
433 SECTION(OLD_FUNCTIONS, 7), 1, 401 SECTION(OLD_FUNCTIONS, 7), 1,
434 // func#0 ------------------------------------------------------ 402 // func#0 ------------------------------------------------------
435 0, // no name, no locals 403 0, // no name, no locals
436 0, 0, // signature index 404 0, 0, // signature index
437 1, 0, // body size 405 1, 0, // body size
438 kExprNop // body 406 kExprNop // body
439 }; 407 };
440 408
441 ModuleResult result = DecodeModule(data, data + arraysize(data)); 409 ModuleResult result = DecodeModule(data, data + arraysize(data));
442 EXPECT_OK(result); 410 EXPECT_OK(result);
443 EXPECT_EQ(1, result.val->functions.size()); 411 EXPECT_EQ(1, result.val->functions.size());
444 WasmFunction* function = &result.val->functions.back(); 412 WasmFunction* function = &result.val->functions.back();
445 413
446 EXPECT_EQ(0, function->name_length); 414 EXPECT_EQ(0, function->name_length);
447 EXPECT_EQ(kCodeStartOffset, function->code_start_offset); 415 EXPECT_EQ(kCodeStartOffset, function->code_start_offset);
448 EXPECT_EQ(kCodeEndOffset, function->code_end_offset); 416 EXPECT_EQ(kCodeEndOffset, function->code_end_offset);
449 417
450 EXPECT_EQ(0, function->local_i32_count); 418 EXPECT_EQ(0, function->local_i32_count);
451 EXPECT_EQ(0, function->local_i64_count); 419 EXPECT_EQ(0, function->local_i64_count);
452 EXPECT_EQ(0, function->local_f32_count); 420 EXPECT_EQ(0, function->local_f32_count);
453 EXPECT_EQ(0, function->local_f64_count); 421 EXPECT_EQ(0, function->local_f64_count);
454 422
455 EXPECT_FALSE(function->exported); 423 EXPECT_FALSE(function->exported);
456 EXPECT_FALSE(function->external);
457 424
458 if (result.val) delete result.val; 425 if (result.val) delete result.val;
459 } 426 }
460 427
461 TEST_F(WasmModuleVerifyTest, OneFunctionWithNopBody_WithLocals) { 428 TEST_F(WasmModuleVerifyTest, OneFunctionWithNopBody_WithLocals) {
462 static const byte kCodeStartOffset = 46; 429 static const byte kCodeStartOffset = 46;
463 static const byte kCodeEndOffset = kCodeStartOffset + 1; 430 static const byte kCodeEndOffset = kCodeStartOffset + 1;
464 431
465 static const byte data[] = { 432 static const byte data[] = {
466 SIGNATURES_SECTION_VOID_VOID, // -- 433 SIGNATURES_SECTION_VOID_VOID, // --
(...skipping 16 matching lines...) Expand all
483 EXPECT_EQ(0, function->name_length); 450 EXPECT_EQ(0, function->name_length);
484 EXPECT_EQ(kCodeStartOffset, function->code_start_offset); 451 EXPECT_EQ(kCodeStartOffset, function->code_start_offset);
485 EXPECT_EQ(kCodeEndOffset, function->code_end_offset); 452 EXPECT_EQ(kCodeEndOffset, function->code_end_offset);
486 453
487 EXPECT_EQ(513, function->local_i32_count); 454 EXPECT_EQ(513, function->local_i32_count);
488 EXPECT_EQ(1027, function->local_i64_count); 455 EXPECT_EQ(1027, function->local_i64_count);
489 EXPECT_EQ(1541, function->local_f32_count); 456 EXPECT_EQ(1541, function->local_f32_count);
490 EXPECT_EQ(2055, function->local_f64_count); 457 EXPECT_EQ(2055, function->local_f64_count);
491 458
492 EXPECT_FALSE(function->exported); 459 EXPECT_FALSE(function->exported);
493 EXPECT_FALSE(function->external);
494 460
495 if (result.val) delete result.val; 461 if (result.val) delete result.val;
496 } 462 }
497 463
498 TEST_F(WasmModuleVerifyTest, OneGlobalOneFunctionWithNopBodyOneDataSegment) { 464 TEST_F(WasmModuleVerifyTest, OneGlobalOneFunctionWithNopBodyOneDataSegment) {
499 static const byte kNameOffset = 49; 465 static const byte kNameOffset = 49;
500 static const byte kCodeStartOffset = 61; 466 static const byte kCodeStartOffset = 61;
501 static const byte kCodeEndOffset = kCodeStartOffset + 3; 467 static const byte kCodeEndOffset = kCodeStartOffset + 3;
502 static const byte kDataSegmentSourceOffset = kCodeEndOffset + 22; 468 static const byte kDataSegmentSourceOffset = kCodeEndOffset + 22;
503 469
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 EXPECT_FALSE(global->exported); 514 EXPECT_FALSE(global->exported);
549 515
550 WasmFunction* function = &result.val->functions.back(); 516 WasmFunction* function = &result.val->functions.back();
551 517
552 EXPECT_EQ(kNameOffset, function->name_offset); 518 EXPECT_EQ(kNameOffset, function->name_offset);
553 EXPECT_EQ(2, function->name_length); 519 EXPECT_EQ(2, function->name_length);
554 EXPECT_EQ(kCodeStartOffset, function->code_start_offset); 520 EXPECT_EQ(kCodeStartOffset, function->code_start_offset);
555 EXPECT_EQ(kCodeEndOffset, function->code_end_offset); 521 EXPECT_EQ(kCodeEndOffset, function->code_end_offset);
556 522
557 EXPECT_FALSE(function->exported); 523 EXPECT_FALSE(function->exported);
558 EXPECT_FALSE(function->external);
559 524
560 WasmDataSegment* segment = &result.val->data_segments.back(); 525 WasmDataSegment* segment = &result.val->data_segments.back();
561 526
562 EXPECT_EQ(0x8b3ae, segment->dest_addr); 527 EXPECT_EQ(0x8b3ae, segment->dest_addr);
563 EXPECT_EQ(kDataSegmentSourceOffset, segment->source_offset); 528 EXPECT_EQ(kDataSegmentSourceOffset, segment->source_offset);
564 EXPECT_EQ(5, segment->source_size); 529 EXPECT_EQ(5, segment->source_size);
565 EXPECT_TRUE(segment->init); 530 EXPECT_TRUE(segment->init);
566 531
567 if (result.val) delete result.val; 532 if (result.val) delete result.val;
568 } 533 }
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 649
685 if (dest_addr <= (mem_size - source_size)) { 650 if (dest_addr <= (mem_size - source_size)) {
686 EXPECT_VERIFIES(data); 651 EXPECT_VERIFIES(data);
687 } else { 652 } else {
688 EXPECT_FAILURE(data); 653 EXPECT_FAILURE(data);
689 } 654 }
690 } 655 }
691 } 656 }
692 } 657 }
693 658
694 // To make below tests for indirect calls much shorter.
695 #define FUNCTION(sig_index, external) kDeclFunctionImport, SIG_INDEX(sig_index)
696
697 TEST_F(WasmModuleVerifyTest, OneIndirectFunction) { 659 TEST_F(WasmModuleVerifyTest, OneIndirectFunction) {
698 static const byte data[] = { 660 static const byte data[] = {
699 // sig#0 ------------------------------------------------------- 661 // sig#0 -------------------------------------------------------
700 SIGNATURES_SECTION_VOID_VOID, 662 SIGNATURES_SECTION_VOID_VOID,
701 // func#0 ------------------------------------------------------ 663 // func#0 ------------------------------------------------------
702 SECTION(OLD_FUNCTIONS, 4), 1, FUNCTION(0, 0), 664 SECTION(OLD_FUNCTIONS, 1 + SIZEOF_EMPTY_FUNCTION), 1, // --
665 EMPTY_FUNCTION(0),
703 // indirect table ---------------------------------------------- 666 // indirect table ----------------------------------------------
704 SECTION(FUNCTION_TABLE, 2), 1, U32V_1(0)}; 667 SECTION(FUNCTION_TABLE, 2), 1, U32V_1(0)};
705 668
706 ModuleResult result = DecodeModule(data, data + arraysize(data)); 669 ModuleResult result = DecodeModule(data, data + arraysize(data));
707 EXPECT_OK(result); 670 EXPECT_OK(result);
708 if (result.ok()) { 671 if (result.ok()) {
709 EXPECT_EQ(1, result.val->signatures.size()); 672 EXPECT_EQ(1, result.val->signatures.size());
710 EXPECT_EQ(1, result.val->functions.size()); 673 EXPECT_EQ(1, result.val->functions.size());
711 EXPECT_EQ(1, result.val->function_table.size()); 674 EXPECT_EQ(1, result.val->function_table.size());
712 EXPECT_EQ(0, result.val->function_table[0]); 675 EXPECT_EQ(0, result.val->function_table[0]);
713 } 676 }
714 if (result.val) delete result.val; 677 if (result.val) delete result.val;
715 } 678 }
716 679
717 TEST_F(WasmModuleVerifyTest, MultipleIndirectFunctions) { 680 TEST_F(WasmModuleVerifyTest, MultipleIndirectFunctions) {
718 static const byte data[] = { 681 static const byte data[] = {
719 // sig#0 ------------------------------------------------------- 682 // sig#0 -------------------------------------------------------
720 SECTION(SIGNATURES, 1 + SIZEOF_SIG_ENTRY_v_v + SIZEOF_SIG_ENTRY_v_x), 683 SECTION(SIGNATURES, 1 + SIZEOF_SIG_ENTRY_v_v + SIZEOF_SIG_ENTRY_v_x),
721 2, // -- 684 2, // --
722 SIG_ENTRY_v_v, // void -> void 685 SIG_ENTRY_v_v, // void -> void
723 SIG_ENTRY_v_x(kLocalI32), // void -> i32 686 SIG_ENTRY_v_x(kLocalI32), // void -> i32
724 // func#0 ------------------------------------------------------ 687 // func#0 ------------------------------------------------------
725 SECTION(OLD_FUNCTIONS, 13), 4, FUNCTION(0, 1), // -- 688 SECTION(OLD_FUNCTIONS, 1 + 4 * SIZEOF_EMPTY_FUNCTION), 4, // --
726 FUNCTION(1, 1), // -- 689 EMPTY_FUNCTION(0), // --
727 FUNCTION(0, 1), // -- 690 EMPTY_FUNCTION(1), // --
728 FUNCTION(1, 1), // -- 691 EMPTY_FUNCTION(0), // --
692 EMPTY_FUNCTION(1), // --
729 // indirect table ---------------------------------------------- 693 // indirect table ----------------------------------------------
730 SECTION(FUNCTION_TABLE, 9), 8, 694 SECTION(FUNCTION_TABLE, 9), 8,
731 U32V_1(0), // -- 695 U32V_1(0), // --
732 U32V_1(1), // -- 696 U32V_1(1), // --
733 U32V_1(2), // -- 697 U32V_1(2), // --
734 U32V_1(3), // -- 698 U32V_1(3), // --
735 U32V_1(0), // -- 699 U32V_1(0), // --
736 U32V_1(1), // -- 700 U32V_1(1), // --
737 U32V_1(2), // -- 701 U32V_1(2), // --
738 U32V_1(3), // -- 702 U32V_1(3), // --
(...skipping 21 matching lines...) Expand all
760 }; 724 };
761 725
762 EXPECT_FAILURE(data); 726 EXPECT_FAILURE(data);
763 } 727 }
764 728
765 TEST_F(WasmModuleVerifyTest, IndirectFunctionInvalidIndex) { 729 TEST_F(WasmModuleVerifyTest, IndirectFunctionInvalidIndex) {
766 static const byte data[] = { 730 static const byte data[] = {
767 // sig#0 ------------------------------------------------------- 731 // sig#0 -------------------------------------------------------
768 SIGNATURES_SECTION_VOID_VOID, 732 SIGNATURES_SECTION_VOID_VOID,
769 // functions --------------------------------------------------- 733 // functions ---------------------------------------------------
770 SECTION(OLD_FUNCTIONS, 4), 1, FUNCTION(0, 1), 734 SECTION(OLD_FUNCTIONS, 1 + SIZEOF_EMPTY_FUNCTION), 1, // --
735 EMPTY_FUNCTION(0),
771 // indirect table ---------------------------------------------- 736 // indirect table ----------------------------------------------
772 SECTION(FUNCTION_TABLE, 3), 1, 1, 0, 737 SECTION(FUNCTION_TABLE, 3), 1, 1, 0,
773 }; 738 };
774 739
775 EXPECT_FAILURE(data); 740 EXPECT_FAILURE(data);
776 } 741 }
777 742
778 class WasmSignatureDecodeTest : public TestWithZone {}; 743 class WasmSignatureDecodeTest : public TestWithZone {};
779 744
780 TEST_F(WasmSignatureDecodeTest, Ok_v_v) { 745 TEST_F(WasmSignatureDecodeTest, Ok_v_v) {
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 EXPECT_OK(result); 887 EXPECT_OK(result);
923 888
924 if (result.val && result.ok()) { 889 if (result.val && result.ok()) {
925 WasmFunction* function = result.val; 890 WasmFunction* function = result.val;
926 EXPECT_EQ(0, function->sig->parameter_count()); 891 EXPECT_EQ(0, function->sig->parameter_count());
927 EXPECT_EQ(0, function->sig->return_count()); 892 EXPECT_EQ(0, function->sig->return_count());
928 EXPECT_EQ(0, function->name_offset); 893 EXPECT_EQ(0, function->name_offset);
929 EXPECT_EQ(SIZEOF_SIG_ENTRY_v_v, function->code_start_offset); 894 EXPECT_EQ(SIZEOF_SIG_ENTRY_v_v, function->code_start_offset);
930 EXPECT_EQ(arraysize(data), function->code_end_offset); 895 EXPECT_EQ(arraysize(data), function->code_end_offset);
931 // TODO(titzer): verify encoding of local declarations 896 // TODO(titzer): verify encoding of local declarations
932 EXPECT_FALSE(function->external);
933 EXPECT_FALSE(function->exported); 897 EXPECT_FALSE(function->exported);
934 } 898 }
935 899
936 if (result.val) delete result.val; 900 if (result.val) delete result.val;
937 } 901 }
938 902
939 TEST_F(WasmModuleVerifyTest, SectionWithoutNameLength) { 903 TEST_F(WasmModuleVerifyTest, SectionWithoutNameLength) {
940 const byte data[] = {1}; 904 const byte data[] = {1};
941 EXPECT_FAILURE(data); 905 EXPECT_FAILURE(data);
942 } 906 }
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
1158 'f', // function name 1122 'f', // function name
1159 }; 1123 };
1160 1124
1161 EXPECT_OFF_END_FAILURE(data, 16, sizeof(data)); 1125 EXPECT_OFF_END_FAILURE(data, 16, sizeof(data));
1162 } 1126 }
1163 1127
1164 TEST_F(WasmModuleVerifyTest, ExportTable_empty1) { 1128 TEST_F(WasmModuleVerifyTest, ExportTable_empty1) {
1165 static const byte data[] = { 1129 static const byte data[] = {
1166 // signatures 1130 // signatures
1167 SIGNATURES_SECTION_VOID_VOID, 1131 SIGNATURES_SECTION_VOID_VOID,
1168 SECTION(OLD_FUNCTIONS, 1 + EMPTY_FUNCTION_SIZE), 1132 SECTION(OLD_FUNCTIONS, 1 + SIZEOF_EMPTY_FUNCTION),
1169 1, 1133 1,
1170 EMPTY_FUNCTION(0), 1134 EMPTY_FUNCTION(0),
1171 SECTION(EXPORT_TABLE, 1), 1135 SECTION(EXPORT_TABLE, 1),
1172 0 // -- 1136 0 // --
1173 }; 1137 };
1174 EXPECT_VERIFIES(data); 1138 EXPECT_VERIFIES(data);
1175 } 1139 }
1176 1140
1177 TEST_F(WasmModuleVerifyTest, ExportTable_empty2) { 1141 TEST_F(WasmModuleVerifyTest, ExportTable_empty2) {
1178 static const byte data[] = { 1142 static const byte data[] = {
(...skipping 13 matching lines...) Expand all
1192 1156
1193 TEST_F(WasmModuleVerifyTest, ExportTable_NoFunctions2) { 1157 TEST_F(WasmModuleVerifyTest, ExportTable_NoFunctions2) {
1194 static const byte data[] = {SECTION(EXPORT_TABLE, 1), 0}; 1158 static const byte data[] = {SECTION(EXPORT_TABLE, 1), 0};
1195 EXPECT_FAILURE(data); 1159 EXPECT_FAILURE(data);
1196 } 1160 }
1197 1161
1198 TEST_F(WasmModuleVerifyTest, ExportTableOne) { 1162 TEST_F(WasmModuleVerifyTest, ExportTableOne) {
1199 static const byte data[] = { 1163 static const byte data[] = {
1200 // signatures 1164 // signatures
1201 SIGNATURES_SECTION_VOID_VOID, 1165 SIGNATURES_SECTION_VOID_VOID,
1202 SECTION(OLD_FUNCTIONS, 1 + EMPTY_FUNCTION_SIZE), 1166 SECTION(OLD_FUNCTIONS, 1 + SIZEOF_EMPTY_FUNCTION),
1203 1, // functions 1167 1, // functions
1204 EMPTY_FUNCTION(0), // -- 1168 EMPTY_FUNCTION(0), // --
1205 SECTION(EXPORT_TABLE, 3), 1169 SECTION(EXPORT_TABLE, 3),
1206 1, // exports 1170 1, // exports
1207 FUNC_INDEX(0), // -- 1171 FUNC_INDEX(0), // --
1208 NO_NAME // -- 1172 NO_NAME // --
1209 }; 1173 };
1210 EXPECT_VERIFIES(data); 1174 EXPECT_VERIFIES(data);
1211 } 1175 }
1212 1176
1213 TEST_F(WasmModuleVerifyTest, ExportTableTwo) { 1177 TEST_F(WasmModuleVerifyTest, ExportTableTwo) {
1214 static const byte data[] = { 1178 static const byte data[] = {
1215 // signatures 1179 // signatures
1216 SIGNATURES_SECTION_VOID_VOID, 1180 SIGNATURES_SECTION_VOID_VOID,
1217 SECTION(OLD_FUNCTIONS, 1 + EMPTY_FUNCTION_SIZE), 1181 SECTION(OLD_FUNCTIONS, 1 + SIZEOF_EMPTY_FUNCTION),
1218 1, // functions 1182 1, // functions
1219 EMPTY_FUNCTION(0), // -- 1183 EMPTY_FUNCTION(0), // --
1220 SECTION(EXPORT_TABLE, 12), 1184 SECTION(EXPORT_TABLE, 12),
1221 2, // exports 1185 2, // exports
1222 FUNC_INDEX(0), // -- 1186 FUNC_INDEX(0), // --
1223 NAME_LENGTH(4), 1187 NAME_LENGTH(4),
1224 'n', 1188 'n',
1225 'a', 1189 'a',
1226 'm', 1190 'm',
1227 'e', // -- 1191 'e', // --
1228 FUNC_INDEX(0), // -- 1192 FUNC_INDEX(0), // --
1229 NAME_LENGTH(3), 1193 NAME_LENGTH(3),
1230 'n', 1194 'n',
1231 'o', 1195 'o',
1232 'm' // -- 1196 'm' // --
1233 }; 1197 };
1234 EXPECT_VERIFIES(data); 1198 EXPECT_VERIFIES(data);
1235 } 1199 }
1236 1200
1237 TEST_F(WasmModuleVerifyTest, ExportTableThree) { 1201 TEST_F(WasmModuleVerifyTest, ExportTableThree) {
1238 static const byte data[] = { 1202 static const byte data[] = {
1239 // signatures 1203 // signatures
1240 SIGNATURES_SECTION_VOID_VOID, 1204 SIGNATURES_SECTION_VOID_VOID,
1241 SECTION(OLD_FUNCTIONS, 1 + 3 * EMPTY_FUNCTION_SIZE), 1205 SECTION(OLD_FUNCTIONS, 1 + 3 * SIZEOF_EMPTY_FUNCTION),
1242 3, // functions 1206 3, // functions
1243 EMPTY_FUNCTION(0), // -- 1207 EMPTY_FUNCTION(0), // --
1244 EMPTY_FUNCTION(0), // -- 1208 EMPTY_FUNCTION(0), // --
1245 EMPTY_FUNCTION(0), // -- 1209 EMPTY_FUNCTION(0), // --
1246 SECTION(EXPORT_TABLE, 10), 1210 SECTION(EXPORT_TABLE, 10),
1247 3, // exports 1211 3, // exports
1248 FUNC_INDEX(0), // -- 1212 FUNC_INDEX(0), // --
1249 NAME_LENGTH(1), 1213 NAME_LENGTH(1),
1250 'a', // -- 1214 'a', // --
1251 FUNC_INDEX(1), // -- 1215 FUNC_INDEX(1), // --
1252 NAME_LENGTH(1), 1216 NAME_LENGTH(1),
1253 'b', // -- 1217 'b', // --
1254 FUNC_INDEX(2), // -- 1218 FUNC_INDEX(2), // --
1255 NAME_LENGTH(1), 1219 NAME_LENGTH(1),
1256 'c' // -- 1220 'c' // --
1257 }; 1221 };
1258 EXPECT_VERIFIES(data); 1222 EXPECT_VERIFIES(data);
1259 } 1223 }
1260 1224
1261 TEST_F(WasmModuleVerifyTest, ExportTableThreeOne) { 1225 TEST_F(WasmModuleVerifyTest, ExportTableThreeOne) {
1262 for (int i = 0; i < 6; i++) { 1226 for (int i = 0; i < 6; i++) {
1263 const byte data[] = { 1227 const byte data[] = {
1264 // signatures 1228 // signatures
1265 SIGNATURES_SECTION_VOID_VOID, 1229 SIGNATURES_SECTION_VOID_VOID,
1266 SECTION(OLD_FUNCTIONS, 1 + 3 * EMPTY_FUNCTION_SIZE), 1230 SECTION(OLD_FUNCTIONS, 1 + 3 * SIZEOF_EMPTY_FUNCTION),
1267 3, // functions 1231 3, // functions
1268 EMPTY_FUNCTION(0), // -- 1232 EMPTY_FUNCTION(0), // --
1269 EMPTY_FUNCTION(0), // -- 1233 EMPTY_FUNCTION(0), // --
1270 EMPTY_FUNCTION(0), // -- 1234 EMPTY_FUNCTION(0), // --
1271 SECTION(EXPORT_TABLE, 5), 1235 SECTION(EXPORT_TABLE, 5),
1272 1, // exports 1236 1, // exports
1273 FUNC_INDEX(i), // -- 1237 FUNC_INDEX(i), // --
1274 NAME_LENGTH(2), 1238 NAME_LENGTH(2),
1275 'e', 1239 'e',
1276 'x', // -- 1240 'x', // --
1277 }; 1241 };
1278 1242
1279 if (i < 3) { 1243 if (i < 3) {
1280 EXPECT_VERIFIES(data); 1244 EXPECT_VERIFIES(data);
1281 } else { 1245 } else {
1282 EXPECT_FAILURE(data); 1246 EXPECT_FAILURE(data);
1283 } 1247 }
1284 } 1248 }
1285 } 1249 }
1286 1250
1287 TEST_F(WasmModuleVerifyTest, ExportTableOne_off_end) { 1251 TEST_F(WasmModuleVerifyTest, ExportTableOne_off_end) {
1288 static const byte data[] = { 1252 static const byte data[] = {
1289 // signatures 1253 // signatures
1290 SIGNATURES_SECTION_VOID_VOID, 1254 SIGNATURES_SECTION_VOID_VOID,
1291 SECTION(OLD_FUNCTIONS, 1 + EMPTY_FUNCTION_SIZE), 1255 SECTION(OLD_FUNCTIONS, 1 + SIZEOF_EMPTY_FUNCTION),
1292 1, // functions 1256 1, // functions
1293 EMPTY_FUNCTION(0), // -- 1257 EMPTY_FUNCTION(0), // --
1294 SECTION(EXPORT_TABLE, 1 + 6), 1258 SECTION(EXPORT_TABLE, 1 + 6),
1295 1, // exports 1259 1, // exports
1296 FUNC_INDEX(0), // -- 1260 FUNC_INDEX(0), // --
1297 NO_NAME // -- 1261 NO_NAME // --
1298 }; 1262 };
1299 1263
1300 for (int length = 33; length < sizeof(data); length++) { 1264 for (int length = 33; length < sizeof(data); length++) {
1301 ModuleResult result = DecodeModule(data, data + length); 1265 ModuleResult result = DecodeModule(data, data + length);
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1405 NO_LOCAL_NAMES, // -- 1369 NO_LOCAL_NAMES, // --
1406 FOO_STRING, 1370 FOO_STRING,
1407 NO_LOCAL_NAMES, // -- 1371 NO_LOCAL_NAMES, // --
1408 }; 1372 };
1409 EXPECT_VERIFIES(data); 1373 EXPECT_VERIFIES(data);
1410 } 1374 }
1411 1375
1412 } // namespace wasm 1376 } // namespace wasm
1413 } // namespace internal 1377 } // namespace internal
1414 } // namespace v8 1378 } // 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