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

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

Issue 1743773002: WebAssembly: skip unknown sections, add names (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix limit type Created 4 years, 9 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 | « src/wasm/wasm-module.h ('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
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
925 EXPECT_EQ(4, function->local_i64_count); 925 EXPECT_EQ(4, function->local_i64_count);
926 EXPECT_EQ(5, function->local_f32_count); 926 EXPECT_EQ(5, function->local_f32_count);
927 EXPECT_EQ(6, function->local_f64_count); 927 EXPECT_EQ(6, function->local_f64_count);
928 EXPECT_FALSE(function->external); 928 EXPECT_FALSE(function->external);
929 EXPECT_FALSE(function->exported); 929 EXPECT_FALSE(function->exported);
930 } 930 }
931 931
932 if (result.val) delete result.val; 932 if (result.val) delete result.val;
933 } 933 }
934 934
935 935 TEST_F(WasmModuleVerifyTest, UnknownSectionNoLen) {
936 TEST_F(WasmModuleVerifyTest, WLLSectionNoLen) {
937 const byte data[] = { 936 const byte data[] = {
938 kDeclWLL, // section without length. 937 kMaxModuleSectionCode, // unknown section without length.
939 }; 938 };
940 EXPECT_FAILURE(data); 939 EXPECT_FAILURE(data);
941 } 940 }
942 941
943 942 TEST_F(WasmModuleVerifyTest, UnknownSectionEmpty) {
944 TEST_F(WasmModuleVerifyTest, WLLSectionEmpty) { 943 for (int i = 0; i < 255 - kMaxModuleSectionCode; ++i) {
945 static const byte data[] = { 944 const byte data[] = {
946 kDeclWLL, 0, // empty section 945 byte(kMaxModuleSectionCode + i), 0, // empty unknown section
947 }; 946 };
948 ModuleResult result = DecodeModule(data, data + arraysize(data)); 947 ModuleResult result = DecodeModule(data, data + arraysize(data));
949 EXPECT_TRUE(result.ok()); 948 EXPECT_TRUE(result.ok());
950 if (result.val) delete result.val; 949 if (result.val) delete result.val;
950 }
951 } 951 }
952 952
953 953 TEST_F(WasmModuleVerifyTest, UnknownSectionOne) {
954 TEST_F(WasmModuleVerifyTest, WLLSectionOne) {
955 static const byte data[] = { 954 static const byte data[] = {
956 kDeclWLL, 955 kMaxModuleSectionCode,
957 1, // LEB128 1 956 1, // LEB128 1
958 0, // one byte section 957 0, // one byte section
959 }; 958 };
960 ModuleResult result = DecodeModule(data, data + arraysize(data)); 959 ModuleResult result = DecodeModule(data, data + arraysize(data));
961 EXPECT_TRUE(result.ok()); 960 EXPECT_TRUE(result.ok());
962 if (result.val) delete result.val; 961 if (result.val) delete result.val;
963 } 962 }
964 963
965 964 TEST_F(WasmModuleVerifyTest, UnknownSectionTen) {
966 TEST_F(WasmModuleVerifyTest, WLLSectionTen) {
967 static const byte data[] = { 965 static const byte data[] = {
968 kDeclWLL, 966 kMaxModuleSectionCode,
969 10, // LEB128 10 967 10, // LEB128 10
970 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, // 10 byte section 968 1,
969 2,
970 3,
971 4,
972 5,
973 6,
974 7,
975 8,
976 9,
977 10, // 10 byte section
971 }; 978 };
972 ModuleResult result = DecodeModule(data, data + arraysize(data)); 979 ModuleResult result = DecodeModule(data, data + arraysize(data));
973 EXPECT_TRUE(result.ok()); 980 EXPECT_TRUE(result.ok());
974 if (result.val) delete result.val; 981 if (result.val) delete result.val;
975 } 982 }
976 983
977 984 TEST_F(WasmModuleVerifyTest, UnknownSectionOverflow) {
978 TEST_F(WasmModuleVerifyTest, WLLSectionOverflow) {
979 static const byte data[] = { 985 static const byte data[] = {
980 kDeclWLL, 986 kMaxModuleSectionCode,
981 11, // LEB128 11 987 11, // LEB128 11
982 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, // 10 byte section 988 1,
989 2,
990 3,
991 4,
992 5,
993 6,
994 7,
995 8,
996 9,
997 10, // 10 byte section
983 }; 998 };
984 EXPECT_FAILURE(data); 999 EXPECT_FAILURE(data);
985 } 1000 }
986 1001
987 1002 TEST_F(WasmModuleVerifyTest, UnknownSectionUnderflow) {
988 TEST_F(WasmModuleVerifyTest, WLLSectionUnderflow) {
989 static const byte data[] = { 1003 static const byte data[] = {
990 kDeclWLL, 0xff, 0xff, 0xff, 0xff, 0x0f, // LEB128 0xffffffff 1004 kMaxModuleSectionCode,
991 1, 2, 3, 4, // 4 byte section 1005 0xff,
1006 0xff,
1007 0xff,
1008 0xff,
1009 0x0f, // LEB128 0xffffffff
1010 1,
1011 2,
1012 3,
1013 4, // 4 byte section
992 }; 1014 };
993 EXPECT_FAILURE(data); 1015 EXPECT_FAILURE(data);
994 } 1016 }
995 1017
996 1018 TEST_F(WasmModuleVerifyTest, UnknownSectionLoop) {
997 TEST_F(WasmModuleVerifyTest, WLLSectionLoop) {
998 // Would infinite loop decoding if wrapping and allowed. 1019 // Would infinite loop decoding if wrapping and allowed.
999 static const byte data[] = { 1020 static const byte data[] = {
1000 kDeclWLL, 0xfa, 0xff, 0xff, 0xff, 0x0f, // LEB128 0xfffffffa 1021 kMaxModuleSectionCode,
1001 1, 2, 3, 4, // 4 byte section 1022 0xfa,
1023 0xff,
1024 0xff,
1025 0xff,
1026 0x0f, // LEB128 0xfffffffa
1027 1,
1028 2,
1029 3,
1030 4, // 4 byte section
1002 }; 1031 };
1003 EXPECT_FAILURE(data); 1032 EXPECT_FAILURE(data);
1004 } 1033 }
1005 1034
1035 TEST_F(WasmModuleVerifyTest, UnknownSectionSkipped) {
1036 static const byte data[] = {
1037 kMaxModuleSectionCode,
1038 1, // LEB128 1
1039 0, // one byte section
1040 kDeclGlobals,
1041 1,
1042 0,
1043 0,
1044 0,
1045 0, // name offset
1046 kMemI32, // memory type
1047 0, // exported
1048 };
1049 ModuleResult result = DecodeModule(data, data + arraysize(data));
1050 EXPECT_TRUE(result.ok());
1051
1052 EXPECT_EQ(1, result.val->globals.size());
1053 EXPECT_EQ(0, result.val->functions.size());
1054 EXPECT_EQ(0, result.val->data_segments.size());
1055
1056 WasmGlobal* global = &result.val->globals.back();
1057
1058 EXPECT_EQ(0, global->name_offset);
1059 EXPECT_EQ(MachineType::Int32(), global->type);
1060 EXPECT_EQ(0, global->offset);
1061 EXPECT_FALSE(global->exported);
1062
1063 if (result.val) delete result.val;
1064 }
1065
1006 TEST_F(WasmModuleVerifyTest, ImportTable_empty) { 1066 TEST_F(WasmModuleVerifyTest, ImportTable_empty) {
1007 static const byte data[] = {kDeclSignatures, 0, kDeclImportTable, 0}; 1067 static const byte data[] = {kDeclSignatures, 0, kDeclImportTable, 0};
1008 EXPECT_VERIFIES(data); 1068 EXPECT_VERIFIES(data);
1009 } 1069 }
1010 1070
1011 TEST_F(WasmModuleVerifyTest, ImportTable_nosigs) { 1071 TEST_F(WasmModuleVerifyTest, ImportTable_nosigs) {
1012 static const byte data[] = {kDeclImportTable, 0}; 1072 static const byte data[] = {kDeclImportTable, 0};
1013 EXPECT_FAILURE(data); 1073 EXPECT_FAILURE(data);
1014 } 1074 }
1015 1075
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 for (int length = 13; length < sizeof(data); length++) { 1207 for (int length = 13; length < sizeof(data); length++) {
1148 ModuleResult result = DecodeModule(data, data + length); 1208 ModuleResult result = DecodeModule(data, data + length);
1149 EXPECT_FALSE(result.ok()); 1209 EXPECT_FALSE(result.ok());
1150 if (result.val) delete result.val; 1210 if (result.val) delete result.val;
1151 } 1211 }
1152 } 1212 }
1153 1213
1154 } // namespace wasm 1214 } // namespace wasm
1155 } // namespace internal 1215 } // namespace internal
1156 } // namespace v8 1216 } // namespace v8
OLDNEW
« no previous file with comments | « src/wasm/wasm-module.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698