| 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 c1368bbb4c3b03546f10c9a6a6555230ce09a9d9..988caafcaf54b7639045c5cb9c1c7a009b36b837 100644
|
| --- a/test/unittests/wasm/module-decoder-unittest.cc
|
| +++ b/test/unittests/wasm/module-decoder-unittest.cc
|
| @@ -456,6 +456,7 @@ TEST_F(WasmModuleVerifyTest, OneFunctionWithNopBody_WithLocals) {
|
| TEST_F(WasmModuleVerifyTest, OneGlobalOneFunctionWithNopBodyOneDataSegment) {
|
| static const byte kCodeStartOffset = 8 + 4 + 5 + 4 + 18;
|
| static const byte kCodeEndOffset = kCodeStartOffset + 3;
|
| + static const byte kDataSegmentSourceOffset = kCodeEndOffset + 6;
|
|
|
| static const byte data[] = {
|
| kDeclMemory, 28, 28, 1,
|
| @@ -478,10 +479,9 @@ TEST_F(WasmModuleVerifyTest, OneGlobalOneFunctionWithNopBodyOneDataSegment) {
|
| kExprNop, // func#0 body
|
| kExprNop, // func#0 body
|
| // segment#0 -------------------------------------------------
|
| - kDeclDataSegments, 1, 0xae, 0xb3, 0x08, 0, // dest addr
|
| - 15, 0, 0, 0, // source offset
|
| - 5, 0, 0, 0, // source size
|
| - 1, // init
|
| + kDeclDataSegments, 1, U32V_3(0x8b3ae), // dest addr
|
| + U32V_1(5), // source size
|
| + 0, 1, 2, 3, 4, // data bytes
|
| // rest ------------------------------------------------------
|
| kDeclEnd,
|
| };
|
| @@ -513,7 +513,7 @@ TEST_F(WasmModuleVerifyTest, OneGlobalOneFunctionWithNopBodyOneDataSegment) {
|
| WasmDataSegment* segment = &result.val->data_segments.back();
|
|
|
| EXPECT_EQ(0x8b3ae, segment->dest_addr);
|
| - EXPECT_EQ(15, segment->source_offset);
|
| + EXPECT_EQ(kDataSegmentSourceOffset, segment->source_offset);
|
| EXPECT_EQ(5, segment->source_size);
|
| EXPECT_TRUE(segment->init);
|
|
|
| @@ -523,14 +523,13 @@ TEST_F(WasmModuleVerifyTest, OneGlobalOneFunctionWithNopBodyOneDataSegment) {
|
|
|
|
|
| TEST_F(WasmModuleVerifyTest, OneDataSegment) {
|
| + const byte kDataSegmentSourceOffset = 8 + 10;
|
| const byte data[] = {
|
| - kDeclMemory, 28, 28, 1, kDeclDataSegments, 1, 0xaa, 0xbb, 0x09,
|
| - 0, // dest addr
|
| - 11, 0, 0,
|
| - 0, // source offset
|
| - 3, 0, 0,
|
| - 0, // source size
|
| - 1, // init
|
| + kDeclMemory, 28, 28, 1,
|
| + kDeclDataSegments, 1,
|
| + U32V_3(0x9bbaa), // dest addr
|
| + U32V_1(3), // source size
|
| + 'a', 'b', 'c' // data bytes
|
| };
|
|
|
| {
|
| @@ -544,7 +543,7 @@ TEST_F(WasmModuleVerifyTest, OneDataSegment) {
|
| WasmDataSegment* segment = &result.val->data_segments.back();
|
|
|
| EXPECT_EQ(0x9bbaa, segment->dest_addr);
|
| - EXPECT_EQ(11, segment->source_offset);
|
| + EXPECT_EQ(kDataSegmentSourceOffset, segment->source_offset);
|
| EXPECT_EQ(3, segment->source_size);
|
| EXPECT_TRUE(segment->init);
|
|
|
| @@ -556,21 +555,18 @@ TEST_F(WasmModuleVerifyTest, OneDataSegment) {
|
|
|
|
|
| TEST_F(WasmModuleVerifyTest, TwoDataSegments) {
|
| + const byte kDataSegment0SourceOffset = 8 + 10;
|
| + const byte kDataSegment1SourceOffset = 8 + 10 + 8;
|
| +
|
| const byte data[] = {
|
| - kDeclMemory, 28, 28, 1, kDeclDataSegments, 2, 0xee, 0xff, 0x07,
|
| - 0, // dest addr
|
| - 9, 0, 0,
|
| - 0, // #0: source offset
|
| - 4, 0, 0,
|
| - 0, // source size
|
| - 0, // init
|
| - 0xcc, 0xdd, 0x06,
|
| - 0, // #1: dest addr
|
| - 6, 0, 0,
|
| - 0, // source offset
|
| - 10, 0, 0,
|
| - 0, // source size
|
| - 1, // init
|
| + kDeclMemory, 28, 28, 1,
|
| + kDeclDataSegments, 2,
|
| + U32V_3(0x7ffee), // #0: dest addr
|
| + U32V_1(4), // source size
|
| + 1, 2, 3, 4, // data bytes
|
| + U32V_3(0x6ddcc), // #1: dest addr
|
| + U32V_1(10), // source size
|
| + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 // data bytes
|
| };
|
|
|
| {
|
| @@ -584,12 +580,12 @@ TEST_F(WasmModuleVerifyTest, TwoDataSegments) {
|
| WasmDataSegment* s1 = &result.val->data_segments[1];
|
|
|
| EXPECT_EQ(0x7ffee, s0->dest_addr);
|
| - EXPECT_EQ(9, s0->source_offset);
|
| + EXPECT_EQ(kDataSegment0SourceOffset, s0->source_offset);
|
| EXPECT_EQ(4, s0->source_size);
|
| - EXPECT_FALSE(s0->init);
|
| + EXPECT_TRUE(s0->init);
|
|
|
| EXPECT_EQ(0x6ddcc, s1->dest_addr);
|
| - EXPECT_EQ(6, s1->source_offset);
|
| + EXPECT_EQ(kDataSegment1SourceOffset, s1->source_offset);
|
| EXPECT_EQ(10, s1->source_size);
|
| EXPECT_TRUE(s1->init);
|
|
|
| @@ -600,44 +596,8 @@ TEST_F(WasmModuleVerifyTest, TwoDataSegments) {
|
| }
|
|
|
|
|
| -TEST_F(WasmModuleVerifyTest, DataSegmentWithInvalidSource) {
|
| - const int dest_addr = 0x100;
|
| - const byte mem_pages = 1;
|
| - const int kHeaderSize = 8;
|
| - const int kDataSize = 19;
|
| - const int kTotalSize = kHeaderSize + kDataSize;
|
| -
|
| - for (int source_offset = 0; source_offset < 5 + kDataSize; source_offset++) {
|
| - for (int source_size = -1; source_size < 5 + kDataSize; source_size += 3) {
|
| - byte data[] = {
|
| - kDeclMemory,
|
| - mem_pages,
|
| - mem_pages,
|
| - 1,
|
| - kDeclDataSegments,
|
| - 1,
|
| - U32_LE(dest_addr),
|
| - U32_LE(source_offset),
|
| - U32_LE(source_size),
|
| - 1, // init
|
| - };
|
| -
|
| - STATIC_ASSERT(kDataSize == arraysize(data));
|
| -
|
| - if (source_offset < kTotalSize && source_size >= 0 &&
|
| - (source_offset + source_size) <= kTotalSize) {
|
| - EXPECT_VERIFIES(data);
|
| - } else {
|
| - EXPECT_FAILURE(data);
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -
|
| TEST_F(WasmModuleVerifyTest, DataSegmentWithInvalidDest) {
|
| const int source_size = 3;
|
| - const int source_offset = 11;
|
|
|
| for (byte mem_pages = 1; mem_pages < 16; mem_pages++) {
|
| int mem_size = mem_pages * 0x10000; // 64k pages.
|
| @@ -651,10 +611,9 @@ TEST_F(WasmModuleVerifyTest, DataSegmentWithInvalidDest) {
|
| 1,
|
| kDeclDataSegments,
|
| 1,
|
| - U32_LE(dest_addr),
|
| - U32_LE(source_offset),
|
| - U32_LE(source_size),
|
| - 1, // init
|
| + U32V_3(dest_addr),
|
| + U32V_1(source_size),
|
| + 'a', 'b', 'c'
|
| };
|
|
|
| if (dest_addr <= (mem_size - source_size)) {
|
|
|