| Index: test/unittests/wasm/decoder-unittest.cc
|
| diff --git a/test/unittests/wasm/decoder-unittest.cc b/test/unittests/wasm/decoder-unittest.cc
|
| index d773c955c0454e629d7ac501d02971a9352edc53..11d68f161eecfa32adf4faa2050cb329e1fff671 100644
|
| --- a/test/unittests/wasm/decoder-unittest.cc
|
| +++ b/test/unittests/wasm/decoder-unittest.cc
|
| @@ -428,6 +428,26 @@ TEST_F(DecoderTest, ReadU32v_extra_bits) {
|
| }
|
| }
|
|
|
| +TEST_F(DecoderTest, ReadI32v_extra_bits_negative) {
|
| + // OK for negative signed values to have extra ones.
|
| + int length = 0;
|
| + byte data[] = {0xff, 0xff, 0xff, 0xff, 0x7f};
|
| + decoder.Reset(data, data + sizeof(data));
|
| + decoder.checked_read_i32v(decoder.start(), 0, &length);
|
| + EXPECT_EQ(5, length);
|
| + EXPECT_TRUE(decoder.ok());
|
| +}
|
| +
|
| +TEST_F(DecoderTest, ReadI32v_extra_bits_positive) {
|
| + // Not OK for positive signed values to have extra ones.
|
| + int length = 0;
|
| + byte data[] = {0x80, 0x80, 0x80, 0x80, 0x77};
|
| + decoder.Reset(data, data + sizeof(data));
|
| + decoder.checked_read_i32v(decoder.start(), 0, &length);
|
| + EXPECT_EQ(5, length);
|
| + EXPECT_FALSE(decoder.ok());
|
| +}
|
| +
|
| TEST_F(DecoderTest, ReadU32v_Bits) {
|
| // A more exhaustive test.
|
| const int kMaxSize = 5;
|
| @@ -587,8 +607,7 @@ TEST_F(DecoderTest, ReadI64v_Bits) {
|
|
|
| int length = 1 + i / 7;
|
| for (int j = 0; j < kMaxSize; j++) {
|
| - const uint64_t uval = bit_cast<uint64_t>(val);
|
| - data[j] = static_cast<byte>((uval >> (7 * j)) & MASK_7);
|
| + data[j] = static_cast<byte>((val >> (7 * j)) & MASK_7);
|
| }
|
| for (int j = 0; j < length - 1; j++) {
|
| data[j] |= 0x80;
|
| @@ -623,6 +642,26 @@ TEST_F(DecoderTest, ReadU64v_extra_bits) {
|
| }
|
| }
|
|
|
| +TEST_F(DecoderTest, ReadI64v_extra_bits_negative) {
|
| + // OK for negative signed values to have extra ones.
|
| + int length = 0;
|
| + byte data[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f};
|
| + decoder.Reset(data, data + sizeof(data));
|
| + decoder.checked_read_i64v(decoder.start(), 0, &length);
|
| + EXPECT_EQ(10, length);
|
| + EXPECT_TRUE(decoder.ok());
|
| +}
|
| +
|
| +TEST_F(DecoderTest, ReadI64v_extra_bits_positive) {
|
| + // Not OK for positive signed values to have extra ones.
|
| + int length = 0;
|
| + byte data[] = {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x77};
|
| + decoder.Reset(data, data + sizeof(data));
|
| + decoder.checked_read_i64v(decoder.start(), 0, &length);
|
| + EXPECT_EQ(10, length);
|
| + EXPECT_FALSE(decoder.ok());
|
| +}
|
| +
|
| } // namespace wasm
|
| } // namespace internal
|
| } // namespace v8
|
|
|