Commit d968ae0a authored by Clemens Backes's avatar Clemens Backes Committed by Commit Bot

[api] Deprecate SetExpectInlineWasm

This flag was used for IndexedDB support. Last uses in chrome were
removed in https://crrev.com/c/2013046, hence the API method can be
deprecated.

Also remove deserializer tests that were disabled by default or just
test that random bytes (from the deserializer's perspective) fail
to decode.

R=adamk@chromium.org

Bug: v8:10146
Change-Id: I8596849c3b51ab1c60272a49ff3fdaa0946452bf
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2013104
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#65931}
parent 67b6af7c
...@@ -2467,7 +2467,10 @@ class V8_EXPORT ValueDeserializer { ...@@ -2467,7 +2467,10 @@ class V8_EXPORT ValueDeserializer {
/** /**
* Expect inline wasm in the data stream (rather than in-memory transfer) * Expect inline wasm in the data stream (rather than in-memory transfer)
*/ */
void SetExpectInlineWasm(bool allow_inline_wasm); V8_DEPRECATED(
"Wasm module serialization is only supported via explicit methods, e.g. "
"CompiledWasmModule::Serialize()")
void SetExpectInlineWasm(bool allow_inline_wasm) {}
/** /**
* Reads the underlying wire format version. Likely mostly to be useful to * Reads the underlying wire format version. Likely mostly to be useful to
......
...@@ -3310,10 +3310,6 @@ void ValueDeserializer::SetSupportsLegacyWireFormat( ...@@ -3310,10 +3310,6 @@ void ValueDeserializer::SetSupportsLegacyWireFormat(
private_->supports_legacy_wire_format = supports_legacy_wire_format; private_->supports_legacy_wire_format = supports_legacy_wire_format;
} }
void ValueDeserializer::SetExpectInlineWasm(bool expect_inline_wasm) {
private_->deserializer.set_expect_inline_wasm(expect_inline_wasm);
}
uint32_t ValueDeserializer::GetWireFormatVersion() const { uint32_t ValueDeserializer::GetWireFormatVersion() const {
CHECK(!private_->has_aborted); CHECK(!private_->has_aborted);
return private_->deserializer.GetWireFormatVersion(); return private_->deserializer.GetWireFormatVersion();
......
...@@ -1912,9 +1912,7 @@ MaybeHandle<Object> ValueDeserializer::ReadJSError() { ...@@ -1912,9 +1912,7 @@ MaybeHandle<Object> ValueDeserializer::ReadJSError() {
MaybeHandle<JSObject> ValueDeserializer::ReadWasmModuleTransfer() { MaybeHandle<JSObject> ValueDeserializer::ReadWasmModuleTransfer() {
auto enabled_features = wasm::WasmFeatures::FromIsolate(isolate_); auto enabled_features = wasm::WasmFeatures::FromIsolate(isolate_);
if ((FLAG_wasm_disable_structured_cloning && if (FLAG_wasm_disable_structured_cloning && !enabled_features.has_threads()) {
!enabled_features.has_threads()) ||
expect_inline_wasm()) {
return MaybeHandle<JSObject>(); return MaybeHandle<JSObject>();
} }
......
...@@ -224,9 +224,6 @@ class ValueDeserializer { ...@@ -224,9 +224,6 @@ class ValueDeserializer {
bool ReadUint64(uint64_t* value) V8_WARN_UNUSED_RESULT; bool ReadUint64(uint64_t* value) V8_WARN_UNUSED_RESULT;
bool ReadDouble(double* value) V8_WARN_UNUSED_RESULT; bool ReadDouble(double* value) V8_WARN_UNUSED_RESULT;
bool ReadRawBytes(size_t length, const void** data) V8_WARN_UNUSED_RESULT; bool ReadRawBytes(size_t length, const void** data) V8_WARN_UNUSED_RESULT;
void set_expect_inline_wasm(bool expect_inline_wasm) {
expect_inline_wasm_ = expect_inline_wasm;
}
private: private:
// Reading the wire format. // Reading the wire format.
...@@ -239,7 +236,6 @@ class ValueDeserializer { ...@@ -239,7 +236,6 @@ class ValueDeserializer {
Maybe<T> ReadZigZag() V8_WARN_UNUSED_RESULT; Maybe<T> ReadZigZag() V8_WARN_UNUSED_RESULT;
Maybe<double> ReadDouble() V8_WARN_UNUSED_RESULT; Maybe<double> ReadDouble() V8_WARN_UNUSED_RESULT;
Maybe<Vector<const uint8_t>> ReadRawBytes(int size) V8_WARN_UNUSED_RESULT; Maybe<Vector<const uint8_t>> ReadRawBytes(int size) V8_WARN_UNUSED_RESULT;
bool expect_inline_wasm() const { return expect_inline_wasm_; }
// Reads a string if it matches the one provided. // Reads a string if it matches the one provided.
// Returns true if this was the case. Otherwise, nothing is consumed. // Returns true if this was the case. Otherwise, nothing is consumed.
...@@ -299,7 +295,6 @@ class ValueDeserializer { ...@@ -299,7 +295,6 @@ class ValueDeserializer {
const uint8_t* const end_; const uint8_t* const end_;
uint32_t version_ = 0; uint32_t version_ = 0;
uint32_t next_id_ = 0; uint32_t next_id_ = 0;
bool expect_inline_wasm_ = false;
// Always global handles. // Always global handles.
Handle<FixedArray> id_map_; Handle<FixedArray> id_map_;
......
...@@ -77,9 +77,6 @@ class ValueSerializerTest : public TestWithIsolate { ...@@ -77,9 +77,6 @@ class ValueSerializerTest : public TestWithIsolate {
return deserialization_context_; return deserialization_context_;
} }
bool ExpectInlineWasm() const { return expect_inline_wasm_; }
void SetExpectInlineWasm(bool value) { expect_inline_wasm_ = value; }
// Overridden in more specific fixtures. // Overridden in more specific fixtures.
virtual ValueSerializer::Delegate* GetSerializerDelegate() { return nullptr; } virtual ValueSerializer::Delegate* GetSerializerDelegate() { return nullptr; }
virtual void BeforeEncode(ValueSerializer*) {} virtual void BeforeEncode(ValueSerializer*) {}
...@@ -166,7 +163,6 @@ class ValueSerializerTest : public TestWithIsolate { ...@@ -166,7 +163,6 @@ class ValueSerializerTest : public TestWithIsolate {
static_cast<int>(data.size()), static_cast<int>(data.size()),
GetDeserializerDelegate()); GetDeserializerDelegate());
deserializer.SetSupportsLegacyWireFormat(true); deserializer.SetSupportsLegacyWireFormat(true);
deserializer.SetExpectInlineWasm(ExpectInlineWasm());
BeforeDecode(&deserializer); BeforeDecode(&deserializer);
CHECK(deserializer.ReadHeader(context).FromMaybe(false)); CHECK(deserializer.ReadHeader(context).FromMaybe(false));
Local<Value> result; Local<Value> result;
...@@ -188,7 +184,6 @@ class ValueSerializerTest : public TestWithIsolate { ...@@ -188,7 +184,6 @@ class ValueSerializerTest : public TestWithIsolate {
static_cast<int>(data.size()), static_cast<int>(data.size()),
GetDeserializerDelegate()); GetDeserializerDelegate());
deserializer.SetSupportsLegacyWireFormat(true); deserializer.SetSupportsLegacyWireFormat(true);
deserializer.SetExpectInlineWasm(ExpectInlineWasm());
BeforeDecode(&deserializer); BeforeDecode(&deserializer);
CHECK(deserializer.ReadHeader(context).FromMaybe(false)); CHECK(deserializer.ReadHeader(context).FromMaybe(false));
CHECK_EQ(0u, deserializer.GetWireFormatVersion()); CHECK_EQ(0u, deserializer.GetWireFormatVersion());
...@@ -211,7 +206,6 @@ class ValueSerializerTest : public TestWithIsolate { ...@@ -211,7 +206,6 @@ class ValueSerializerTest : public TestWithIsolate {
static_cast<int>(data.size()), static_cast<int>(data.size()),
GetDeserializerDelegate()); GetDeserializerDelegate());
deserializer.SetSupportsLegacyWireFormat(true); deserializer.SetSupportsLegacyWireFormat(true);
deserializer.SetExpectInlineWasm(ExpectInlineWasm());
BeforeDecode(&deserializer); BeforeDecode(&deserializer);
Maybe<bool> header_result = deserializer.ReadHeader(context); Maybe<bool> header_result = deserializer.ReadHeader(context);
if (header_result.IsNothing()) { if (header_result.IsNothing()) {
...@@ -273,7 +267,6 @@ class ValueSerializerTest : public TestWithIsolate { ...@@ -273,7 +267,6 @@ class ValueSerializerTest : public TestWithIsolate {
Local<Context> deserialization_context_; Local<Context> deserialization_context_;
Local<FunctionTemplate> host_object_constructor_template_; Local<FunctionTemplate> host_object_constructor_template_;
i::Isolate* isolate_; i::Isolate* isolate_;
bool expect_inline_wasm_ = false;
DISALLOW_COPY_AND_ASSIGN(ValueSerializerTest); DISALLOW_COPY_AND_ASSIGN(ValueSerializerTest);
}; };
...@@ -2471,7 +2464,6 @@ class ValueSerializerTestWithWasm : public ValueSerializerTest { ...@@ -2471,7 +2464,6 @@ class ValueSerializerTestWithWasm : public ValueSerializerTest {
void Reset() { void Reset() {
current_serializer_delegate_ = nullptr; current_serializer_delegate_ = nullptr;
transfer_modules_.clear(); transfer_modules_.clear();
SetExpectInlineWasm(false);
} }
void EnableTransferSerialization() { void EnableTransferSerialization() {
...@@ -2684,7 +2676,6 @@ TEST_F(ValueSerializerTestWithWasm, RoundtripWasmTransfer) { ...@@ -2684,7 +2676,6 @@ TEST_F(ValueSerializerTestWithWasm, RoundtripWasmTransfer) {
TEST_F(ValueSerializerTestWithWasm, CannotTransferWasmWhenExpectingInline) { TEST_F(ValueSerializerTestWithWasm, CannotTransferWasmWhenExpectingInline) {
EnableTransferSerialization(); EnableTransferSerialization();
SetExpectInlineWasm(true);
ExpectFail(); ExpectFail();
} }
...@@ -2704,116 +2695,6 @@ TEST_F(ValueSerializerTestWithWasm, ComplexObjectWithManyTransfer) { ...@@ -2704,116 +2695,6 @@ TEST_F(ValueSerializerTestWithWasm, ComplexObjectWithManyTransfer) {
ExpectScriptTrue("result.mod1 != result.mod2"); ExpectScriptTrue("result.mod1 != result.mod2");
} }
// As produced around Chrome 56.
const unsigned char kSerializedIncrementerWasm[] = {
0xFF, 0x09, 0x3F, 0x00, 0x57, 0x79, 0x2D, 0x00, 0x61, 0x73, 0x6D, 0x0D,
0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60, 0x01, 0x7F, 0x01, 0x7F, 0x03,
0x02, 0x01, 0x00, 0x07, 0x0D, 0x01, 0x09, 0x69, 0x6E, 0x63, 0x72, 0x65,
0x6D, 0x65, 0x6E, 0x74, 0x00, 0x00, 0x0A, 0x08, 0x01, 0x06, 0x00, 0x20,
0x00, 0x41, 0x01, 0x6A, 0xF8, 0x04, 0xA1, 0x06, 0xDE, 0xC0, 0xC6, 0x44,
0x3C, 0x29, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x00, 0x81, 0x4E,
0xCE, 0x7C, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x30, 0x02,
0x00, 0x00, 0xB0, 0x25, 0x30, 0xE3, 0xF2, 0xDB, 0x2E, 0x48, 0x00, 0x00,
0x00, 0x80, 0xE8, 0x00, 0x00, 0x80, 0xE0, 0x01, 0x00, 0x80, 0x00, 0x00,
0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x07, 0x08, 0x00, 0x00, 0x09, 0x04,
0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x3C, 0x8C, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x01, 0x10, 0x8C, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x70, 0x94, 0x01, 0x0C, 0x8B,
0xC1, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x25, 0xDC, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x9E, 0x01, 0x10, 0x8C, 0xC0, 0x00, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x84, 0xC0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x7D, 0x01, 0x1A, 0xE1, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x88, 0x42, 0x32, 0x03,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x02, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x49, 0x3B, 0xA5, 0x60, 0x0C, 0x00,
0x00, 0x0F, 0x86, 0x04, 0x00, 0x00, 0x00, 0x83, 0xC0, 0x01, 0xC3, 0x55,
0x48, 0x89, 0xE5, 0x49, 0xBA, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00,
0x00, 0x41, 0x52, 0x48, 0x83, 0xEC, 0x08, 0x48, 0x89, 0x45, 0xF0, 0x48,
0xBB, 0xB0, 0x67, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xC0, 0x48,
0xBE, 0xE1, 0x57, 0x81, 0x85, 0xF6, 0x14, 0x00, 0x00, 0xE8, 0xFC, 0x3C,
0xEA, 0xFF, 0x48, 0x8B, 0x45, 0xF0, 0x48, 0x8B, 0xE5, 0x5D, 0xEB, 0xBF,
0x66, 0x90, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x44, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0F, 0x20, 0x84, 0x0F, 0x7D, 0x01, 0x0D, 0x00, 0x0F, 0x04,
0x6D, 0x08, 0x0F, 0xF0, 0x02, 0x80, 0x94, 0x01, 0x0C, 0x8B, 0xC1, 0x00,
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xED, 0xA9, 0x2D, 0x00, 0x00,
0x00, 0x00, 0x00, 0x9E, 0xE0, 0x38, 0x1A, 0x61, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x23, 0x88, 0x42, 0x32, 0x03, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9A, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x02, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x55, 0x48, 0x89, 0xE5, 0x56, 0x57, 0x48,
0x8B, 0x45, 0x10, 0xE8, 0x11, 0xED, 0xED, 0xFF, 0xA8, 0x01, 0x0F, 0x85,
0x2D, 0x00, 0x00, 0x00, 0x48, 0xC1, 0xE8, 0x20, 0xC5, 0xF9, 0x57, 0xC0,
0xC5, 0xFB, 0x2A, 0xC0, 0xC4, 0xE1, 0xFB, 0x2C, 0xC0, 0x48, 0x83, 0xF8,
0x01, 0x0F, 0x80, 0x34, 0x00, 0x00, 0x00, 0x8B, 0xC0, 0xE8, 0x27, 0xFE,
0xFF, 0xFF, 0x48, 0xC1, 0xE0, 0x20, 0x48, 0x8B, 0xE5, 0x5D, 0xC2, 0x10,
0x00, 0x49, 0x39, 0x45, 0xA0, 0x0F, 0x84, 0x07, 0x00, 0x00, 0x00, 0xC5,
0xFB, 0x10, 0x40, 0x07, 0xEB, 0xCE, 0x49, 0xBA, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xF8, 0x7F, 0xC4, 0xC1, 0xF9, 0x6E, 0xC2, 0xEB, 0xBD, 0x48,
0x83, 0xEC, 0x08, 0xC5, 0xFB, 0x11, 0x04, 0x24, 0xE8, 0xCC, 0xFE, 0xFF,
0xFF, 0x48, 0x83, 0xC4, 0x08, 0xEB, 0xB8, 0x66, 0x90, 0x02, 0x00, 0x00,
0x00, 0x03, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0x0F, 0x39, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x00,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x20, 0x84,
0x0F, 0xCC, 0x6E, 0x7D, 0x01, 0x72, 0x98, 0x00, 0x0F, 0xDC, 0x6D, 0x0C,
0x0F, 0xB0, 0x84, 0x0D, 0x04, 0x84, 0xE3, 0xC0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x84, 0xE0, 0x84, 0x84, 0x18, 0x2F, 0x2F, 0x2F,
0x2F, 0x2F};
TEST_F(ValueSerializerTestWithWasm, DecodeWasmModule) {
if ((true)) return; // TODO(mtrofin): fix this test
std::vector<uint8_t> raw(
kSerializedIncrementerWasm,
kSerializedIncrementerWasm + sizeof(kSerializedIncrementerWasm));
Local<Value> value = DecodeTest(raw);
ASSERT_TRUE(value->IsWasmModuleObject());
ExpectScriptTrue(
"new WebAssembly.Instance(result).exports.increment(8) === 9");
}
// As above, but with empty compiled data. Should work due to fallback to wire
// data.
const unsigned char kSerializedIncrementerWasmWithInvalidCompiledData[] = {
0xFF, 0x09, 0x3F, 0x00, 0x57, 0x79, 0x2D, 0x00, 0x61, 0x73, 0x6D,
0x0D, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x60, 0x01, 0x7F, 0x01,
0x7F, 0x03, 0x02, 0x01, 0x00, 0x07, 0x0D, 0x01, 0x09, 0x69, 0x6E,
0x63, 0x72, 0x65, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x00, 0x0A, 0x08,
0x01, 0x06, 0x00, 0x20, 0x00, 0x41, 0x01, 0x6A, 0x00};
TEST_F(ValueSerializerTestWithWasm, DecodeWasmModuleWithInvalidCompiledData) {
if ((true)) return; // TODO(titzer): regenerate this test
std::vector<uint8_t> raw(
kSerializedIncrementerWasmWithInvalidCompiledData,
kSerializedIncrementerWasmWithInvalidCompiledData +
sizeof(kSerializedIncrementerWasmWithInvalidCompiledData));
Local<Value> value = DecodeTest(raw);
ASSERT_TRUE(value->IsWasmModuleObject());
ExpectScriptTrue(
"new WebAssembly.Instance(result).exports.increment(8) === 9");
}
// As above, but also with empty wire data. Should fail.
const unsigned char kSerializedIncrementerWasmInvalid[] = {
0xFF, 0x09, 0x3F, 0x00, 0x57, 0x79, 0x00, 0x00};
TEST_F(ValueSerializerTestWithWasm,
DecodeWasmModuleWithInvalidCompiledAndWireData) {
std::vector<uint8_t> raw(kSerializedIncrementerWasmInvalid,
kSerializedIncrementerWasmInvalid +
sizeof(kSerializedIncrementerWasmInvalid));
InvalidDecodeTest(raw);
}
TEST_F(ValueSerializerTestWithWasm, DecodeWasmModuleWithInvalidDataLength) {
InvalidDecodeTest({0xFF, 0x09, 0x3F, 0x00, 0x57, 0x79, 0x7F, 0x00});
InvalidDecodeTest({0xFF, 0x09, 0x3F, 0x00, 0x57, 0x79, 0x00, 0x7F});
}
class ValueSerializerTestWithLimitedMemory : public ValueSerializerTest { class ValueSerializerTestWithLimitedMemory : public ValueSerializerTest {
protected: protected:
// GMock doesn't use the "override" keyword. // GMock doesn't use the "override" keyword.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment