| Index: test/unittests/wasm/module-decoder-unittest.cc
|
| diff --git a/test/unittests/wasm/module-decoder-unittest.cc b/test/unittests/wasm/module-decoder-unittest.cc
|
| index 988caafcaf54b7639045c5cb9c1c7a009b36b837..77d05d3b5c0c6d5f790bc24883cd2fed07f020d5 100644
|
| --- a/test/unittests/wasm/module-decoder-unittest.cc
|
| +++ b/test/unittests/wasm/module-decoder-unittest.cc
|
| @@ -13,6 +13,8 @@ namespace internal {
|
| namespace wasm {
|
|
|
| #define EMPTY_FUNCTION(sig_index) 0, SIG_INDEX(sig_index), U16_LE(0)
|
| +#define EMPTY_BODY 0
|
| +#define NOP_BODY 2, 0, kExprNop
|
| #define VOID_VOID_SIG 0, kLocalVoid
|
| #define INT_INT_SIG 1, kLocalI32, kLocalI32
|
|
|
| @@ -1059,12 +1061,20 @@ TEST_F(WasmModuleVerifyTest, ImportTable_off_end) {
|
| EXPECT_OFF_END_FAILURE(data, 5, sizeof(data));
|
| }
|
|
|
| -TEST_F(WasmModuleVerifyTest, ExportTable_empty) {
|
| - static const byte data[] = {kDeclSignatures, 0, kDeclFunctions, 0,
|
| +TEST_F(WasmModuleVerifyTest, ExportTable_empty1) {
|
| + static const byte data[] = {kDeclSignatures, 1, VOID_VOID_SIG,
|
| + kDeclFunctions, 1, EMPTY_FUNCTION(0),
|
| kDeclExportTable, 0};
|
| EXPECT_VERIFIES(data);
|
| }
|
|
|
| +TEST_F(WasmModuleVerifyTest, ExportTable_empty2) {
|
| + static const byte data[] = {kDeclSignatures, 0, kDeclFunctions, 0,
|
| + kDeclExportTable, 0};
|
| + // TODO(titzer): current behavior treats empty functions section as missing.
|
| + EXPECT_FAILURE(data);
|
| +}
|
| +
|
| TEST_F(WasmModuleVerifyTest, ExportTable_NoFunctions1) {
|
| static const byte data[] = {kDeclSignatures, 0, kDeclExportTable, 0};
|
| EXPECT_FAILURE(data);
|
| @@ -1162,6 +1172,96 @@ TEST_F(WasmModuleVerifyTest, ExportTableOne_off_end) {
|
| }
|
| }
|
|
|
| +#define SIGNATURES_SECTION(count, ...) \
|
| + kDeclSignatures, U32V_1(count), __VA_ARGS__
|
| +#define FUNCTION_SIGNATURES_SECTION(count, ...) \
|
| + kDeclFunctionSignatures, U32V_1(count), __VA_ARGS__
|
| +#define FUNCTION_BODIES_SECTION(count, ...) \
|
| + kDeclFunctionBodies, U32V_1(count), __VA_ARGS__
|
| +#define NAMES_SECTION(count, ...) kDeclNames, U32V_1(count), __VA_ARGS__
|
| +
|
| +#define FOO_STRING 3, 'f', 'o', 'o'
|
| +#define NO_LOCAL_NAMES 0
|
| +
|
| +#define EMPTY_SIGNATURES_SECTION kDeclSignatures, 0
|
| +#define EMPTY_FUNCTION_SIGNATURES_SECTION kDeclFunctionSignatures, 0
|
| +#define EMPTY_FUNCTION_BODIES_SECTION kDeclFunctionBodies, 0
|
| +#define EMPTY_NAMES_SECTION kDeclNames, 0
|
| +
|
| +TEST_F(WasmModuleVerifyTest, FunctionSignatures_empty) {
|
| + static const byte data[] = {kDeclSignatures, 0, kDeclFunctionSignatures, 0};
|
| + EXPECT_VERIFIES(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, FunctionSignatures_one) {
|
| + static const byte data[] = {SIGNATURES_SECTION(1, VOID_VOID_SIG),
|
| + FUNCTION_SIGNATURES_SECTION(1, 0)};
|
| + EXPECT_VERIFIES(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, FunctionBodies_empty) {
|
| + static const byte data[] = {EMPTY_SIGNATURES_SECTION,
|
| + EMPTY_FUNCTION_SIGNATURES_SECTION,
|
| + EMPTY_FUNCTION_BODIES_SECTION};
|
| + EXPECT_VERIFIES(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, FunctionBodies_one_empty) {
|
| + static const byte data[] = {SIGNATURES_SECTION(1, VOID_VOID_SIG),
|
| + FUNCTION_SIGNATURES_SECTION(1, 0),
|
| + FUNCTION_BODIES_SECTION(1, EMPTY_BODY)};
|
| + EXPECT_VERIFIES(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, FunctionBodies_one_nop) {
|
| + static const byte data[] = {SIGNATURES_SECTION(1, VOID_VOID_SIG),
|
| + FUNCTION_SIGNATURES_SECTION(1, 0),
|
| + FUNCTION_BODIES_SECTION(1, NOP_BODY)};
|
| + EXPECT_VERIFIES(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, FunctionBodies_count_mismatch1) {
|
| + static const byte data[] = {SIGNATURES_SECTION(1, VOID_VOID_SIG),
|
| + FUNCTION_SIGNATURES_SECTION(2, 0, 0),
|
| + FUNCTION_BODIES_SECTION(1, EMPTY_BODY)};
|
| + EXPECT_FAILURE(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, FunctionBodies_count_mismatch2) {
|
| + static const byte data[] = {SIGNATURES_SECTION(1, VOID_VOID_SIG),
|
| + FUNCTION_SIGNATURES_SECTION(1, 0),
|
| + FUNCTION_BODIES_SECTION(2, NOP_BODY, NOP_BODY)};
|
| + EXPECT_FAILURE(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, Names_empty) {
|
| + static const byte data[] = {
|
| + EMPTY_SIGNATURES_SECTION, EMPTY_FUNCTION_SIGNATURES_SECTION,
|
| + EMPTY_FUNCTION_BODIES_SECTION, EMPTY_NAMES_SECTION};
|
| + EXPECT_VERIFIES(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, Names_one_empty) {
|
| + static const byte data[] = {
|
| + SIGNATURES_SECTION(1, VOID_VOID_SIG), // --
|
| + FUNCTION_SIGNATURES_SECTION(1, 0), // --
|
| + FUNCTION_BODIES_SECTION(1, EMPTY_BODY), // --
|
| + NAMES_SECTION(1, FOO_STRING, NO_LOCAL_NAMES) // --
|
| + };
|
| + EXPECT_VERIFIES(data);
|
| +}
|
| +
|
| +TEST_F(WasmModuleVerifyTest, Names_two_empty) {
|
| + static const byte data[] = {
|
| + SIGNATURES_SECTION(1, VOID_VOID_SIG), // --
|
| + FUNCTION_SIGNATURES_SECTION(2, 0, 0), // --
|
| + FUNCTION_BODIES_SECTION(2, EMPTY_BODY, EMPTY_BODY), // --
|
| + NAMES_SECTION(2, FOO_STRING, NO_LOCAL_NAMES, // --
|
| + FOO_STRING, NO_LOCAL_NAMES) // --
|
| + };
|
| + EXPECT_VERIFIES(data);
|
| +}
|
| +
|
| } // namespace wasm
|
| } // namespace internal
|
| } // namespace v8
|
|
|