| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stdlib.h> | 5 #include <stdlib.h> |
| 6 #include <string.h> | 6 #include <string.h> |
| 7 | 7 |
| 8 #include "src/objects-inl.h" | 8 #include "src/objects-inl.h" |
| 9 #include "src/snapshot/code-serializer.h" | 9 #include "src/snapshot/code-serializer.h" |
| 10 #include "src/version.h" | 10 #include "src/version.h" |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 | 230 |
| 231 builder->WriteTo(*buffer); | 231 builder->WriteTo(*buffer); |
| 232 } | 232 } |
| 233 | 233 |
| 234 void ClearSerializedData() { | 234 void ClearSerializedData() { |
| 235 serialized_bytes_.first = nullptr; | 235 serialized_bytes_.first = nullptr; |
| 236 serialized_bytes_.second = 0; | 236 serialized_bytes_.second = 0; |
| 237 } | 237 } |
| 238 | 238 |
| 239 void InvalidateVersion() { | 239 void InvalidateVersion() { |
| 240 uint32_t* buffer = reinterpret_cast<uint32_t*>( | 240 uint32_t* slot = reinterpret_cast<uint32_t*>( |
| 241 const_cast<uint8_t*>(serialized_bytes_.first)); | 241 const_cast<uint8_t*>(serialized_bytes_.first) + |
| 242 buffer[SerializedCodeData::kVersionHashOffset] = Version::Hash() + 1; | 242 SerializedCodeData::kVersionHashOffset); |
| 243 *slot = Version::Hash() + 1; |
| 243 } | 244 } |
| 244 | 245 |
| 245 void InvalidateWireBytes() { | 246 void InvalidateWireBytes() { |
| 246 memset(const_cast<uint8_t*>(wire_bytes_.first), '\0', | 247 memset(const_cast<uint8_t*>(wire_bytes_.first), '\0', |
| 247 wire_bytes_.second / 2); | 248 wire_bytes_.second / 2); |
| 248 } | 249 } |
| 249 | 250 |
| 251 void InvalidateLength() { |
| 252 uint32_t* slot = reinterpret_cast<uint32_t*>( |
| 253 const_cast<uint8_t*>(serialized_bytes_.first) + |
| 254 SerializedCodeData::kPayloadLengthOffset); |
| 255 *slot = 0xfefefefeu; |
| 256 } |
| 257 |
| 250 v8::MaybeLocal<v8::WasmCompiledModule> Deserialize() { | 258 v8::MaybeLocal<v8::WasmCompiledModule> Deserialize() { |
| 251 ErrorThrower thrower(current_isolate(), ""); | 259 ErrorThrower thrower(current_isolate(), ""); |
| 252 v8::MaybeLocal<v8::WasmCompiledModule> deserialized = | 260 v8::MaybeLocal<v8::WasmCompiledModule> deserialized = |
| 253 v8::WasmCompiledModule::DeserializeOrCompile( | 261 v8::WasmCompiledModule::DeserializeOrCompile( |
| 254 current_isolate_v8(), serialized_bytes(), wire_bytes()); | 262 current_isolate_v8(), serialized_bytes(), wire_bytes()); |
| 255 return deserialized; | 263 return deserialized; |
| 256 } | 264 } |
| 257 | 265 |
| 258 void DeserializeAndRun() { | 266 void DeserializeAndRun() { |
| 259 ErrorThrower thrower(current_isolate(), ""); | 267 ErrorThrower thrower(current_isolate(), ""); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 WasmSerializationTest test; | 407 WasmSerializationTest test; |
| 400 { | 408 { |
| 401 HandleScope scope(test.current_isolate()); | 409 HandleScope scope(test.current_isolate()); |
| 402 test.ClearSerializedData(); | 410 test.ClearSerializedData(); |
| 403 test.DeserializeAndRun(); | 411 test.DeserializeAndRun(); |
| 404 } | 412 } |
| 405 Cleanup(test.current_isolate()); | 413 Cleanup(test.current_isolate()); |
| 406 Cleanup(); | 414 Cleanup(); |
| 407 } | 415 } |
| 408 | 416 |
| 417 TEST(DeserializeInvalidLength) { |
| 418 WasmSerializationTest test; |
| 419 { |
| 420 HandleScope scope(test.current_isolate()); |
| 421 test.InvalidateLength(); |
| 422 test.DeserializeAndRun(); |
| 423 } |
| 424 Cleanup(test.current_isolate()); |
| 425 Cleanup(); |
| 426 } |
| 427 |
| 409 TEST(DeserializeWireBytesAndSerializedDataInvalid) { | 428 TEST(DeserializeWireBytesAndSerializedDataInvalid) { |
| 410 WasmSerializationTest test; | 429 WasmSerializationTest test; |
| 411 { | 430 { |
| 412 HandleScope scope(test.current_isolate()); | 431 HandleScope scope(test.current_isolate()); |
| 413 test.InvalidateVersion(); | 432 test.InvalidateVersion(); |
| 414 test.InvalidateWireBytes(); | 433 test.InvalidateWireBytes(); |
| 415 test.Deserialize(); | 434 test.Deserialize(); |
| 416 } | 435 } |
| 417 Cleanup(test.current_isolate()); | 436 Cleanup(test.current_isolate()); |
| 418 Cleanup(); | 437 Cleanup(); |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 }; | 967 }; |
| 949 | 968 |
| 950 testing::CompileInstantiateWasmModuleForTesting(isolate, &thrower, data, | 969 testing::CompileInstantiateWasmModuleForTesting(isolate, &thrower, data, |
| 951 data + arraysize(data), | 970 data + arraysize(data), |
| 952 ModuleOrigin::kWasmOrigin); | 971 ModuleOrigin::kWasmOrigin); |
| 953 // It should not be possible to instantiate this module. | 972 // It should not be possible to instantiate this module. |
| 954 CHECK(thrower.error()); | 973 CHECK(thrower.error()); |
| 955 } | 974 } |
| 956 Cleanup(); | 975 Cleanup(); |
| 957 } | 976 } |
| OLD | NEW |