Skip to content

Commit

Permalink
test: Validating stack height at branch instructions
Browse files Browse the repository at this point in the history
  • Loading branch information
gumb0 committed Jun 16, 2020
1 parent ed1ff49 commit 0133713
Showing 1 changed file with 191 additions and 0 deletions.
191 changes: 191 additions & 0 deletions test/unittests/validation_stack_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -837,3 +837,194 @@ TEST(validation_stack, if_with_unreachable)
from_hex("0061736d0100000001060160017f017e030201000a0e010c002000047e004201051a0b0b");
EXPECT_THROW_MESSAGE(parse(wasm), validation_error, "stack underflow");
}

TEST(validation_stack, br_missing_result)
{
/* wat2wasm --no-check
(func
(block (result i32)
br 0
)
drop
)
*/
const auto wasm1 = from_hex("0061736d01000000010401600000030201000a0a010800027f0c000b1a0b");
EXPECT_THROW_MESSAGE(parse(wasm1), validation_error, "branch stack underflow");

/* wat2wasm --no-check
(func (result i32)
i32.const 0
(block br 1)
)
*/
const auto wasm2 = from_hex("0061736d010000000105016000017f030201000a0b010900410002400c010b0b");
EXPECT_THROW_MESSAGE(parse(wasm2), validation_error, "branch stack underflow");

/* wat2wasm
(func
(block (result i32)
unreachable
br 0
)
drop
)
*/
const auto wasm3 = from_hex("0061736d01000000010401600000030201000a0b010900027f000c000b1a0b");
EXPECT_NO_THROW(parse(wasm3));

/* wat2wasm
(func
(loop (result i32)
(block (result i32)
br 1
)
)
drop
)
*/
const auto wasm4 =
from_hex("0061736d01000000010401600000030201000a0d010b00037f027f0c010b0b1a0b");
EXPECT_NO_THROW(parse(wasm4));
}

TEST(validation_stack, br_if_missing_result)
{
/* wat2wasm --no-check
(func
(block (result i32)
i32.const 0
br_if 0
)
drop
)
*/
const auto wasm1 = from_hex("0061736d01000000010401600000030201000a0c010a00027f41000d000b1a0b");
EXPECT_THROW_MESSAGE(parse(wasm1), validation_error, "branch stack underflow");

/* wat2wasm --no-check
(func (result i32)
i32.const 0
(block
i32.const 0
br_if 1
)
)
*/
const auto wasm2 =
from_hex("0061736d010000000105016000017f030201000a0d010b004100024041000d010b0b");
EXPECT_THROW_MESSAGE(parse(wasm2), validation_error, "branch stack underflow");

/* wat2wasm
(func
(block (result i32)
unreachable
br_if 0
)
drop
)
*/
const auto wasm3 = from_hex("0061736d01000000010401600000030201000a0b010900027f000d000b1a0b");
EXPECT_NO_THROW(parse(wasm3));

/* wat2wasm
(func
(loop (result i32)
(block (result i32)
i32.const 0
br_if 1
i32.const 0
)
)
drop
)
*/
const auto wasm4 =
from_hex("0061736d01000000010401600000030201000a11010f00037f027f41000d0141000b0b1a0b");
EXPECT_NO_THROW(parse(wasm4));
}

TEST(validation_stack, br_table_missing_result)
{
/* wat2wasm --no-check
(func (result i32)
(block (result i32)
i32.const 0
br_table 0 1
)
drop
)
*/
const auto wasm1 =
from_hex("0061736d010000000105016000017f030201000a0e010c00027f41000e0100010b1a0b");
EXPECT_THROW_MESSAGE(parse(wasm1), validation_error, "branch stack underflow");

/* wat2wasm --no-check
(func (result i32)
i32.const 0
(block (result i32)
i32.const 0
br_table 0 1
)
)
*/
const auto wasm2 =
from_hex("0061736d010000000105016000017f030201000a0f010d004100027f41000e0100010b0b");
EXPECT_THROW_MESSAGE(parse(wasm2), validation_error, "branch stack underflow");

/* wat2wasm
(func (result i32)
(block (result i32)
unreachable
br_table 0 1
)
)
*/
const auto wasm3 =
from_hex("0061736d010000000105016000017f030201000a0c010a00027f000e0100010b0b");
EXPECT_NO_THROW(parse(wasm3));

/* wat2wasm
(func
(loop (result i32)
(block
i32.const 0
br_table 0 1
)
i32.const 0
)
drop
)
*/
const auto wasm4 =
from_hex("0061736d01000000010401600000030201000a13011100037f024041000e0100010b41000b1a0b");
EXPECT_NO_THROW(parse(wasm4));
}

TEST(validation_stack, return_missing_result)
{
/* wat2wasm --no-check
(func (result i32)
return
)
*/
const auto wasm1 = from_hex("0061736d010000000105016000017f030201000a050103000f0b");
EXPECT_THROW_MESSAGE(parse(wasm1), validation_error, "branch stack underflow");

/* wat2wasm --no-check
(func (result i32)
i32.const 0
(block return)
)
*/
const auto wasm2 = from_hex("0061736d010000000105016000017f030201000a0a010800410002400f0b0b");
EXPECT_THROW_MESSAGE(parse(wasm2), validation_error, "branch stack underflow");

/* wat2wasm
(func
unreachable
return
)
*/
const auto wasm3 = from_hex("0061736d01000000010401600000030201000a06010400000f0b");
EXPECT_NO_THROW(parse(wasm3));
}

0 comments on commit 0133713

Please sign in to comment.