summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/bindings.rs12
-rw-r--r--core/serialize_deserialize_test.js14
2 files changed, 19 insertions, 7 deletions
diff --git a/core/bindings.rs b/core/bindings.rs
index af8560c6a..935397480 100644
--- a/core/bindings.rs
+++ b/core/bindings.rs
@@ -26,6 +26,8 @@ use v8::HandleScope;
use v8::Local;
use v8::MapFnTo;
use v8::SharedArrayBuffer;
+use v8::ValueDeserializerHelper;
+use v8::ValueSerializerHelper;
lazy_static::lazy_static! {
pub static ref EXTERNAL_REFERENCES: v8::ExternalReferences =
@@ -827,6 +829,7 @@ fn serialize(
let serialize_deserialize = Box::new(SerializeDeserialize { host_objects });
let mut value_serializer =
v8::ValueSerializer::new(scope, serialize_deserialize);
+ value_serializer.write_header();
match value_serializer.write_value(scope.get_current_context(), value) {
Some(true) => {
let vector = value_serializer.release();
@@ -884,6 +887,15 @@ fn deserialize(
let serialize_deserialize = Box::new(SerializeDeserialize { host_objects });
let mut value_deserializer =
v8::ValueDeserializer::new(scope, serialize_deserialize, &zero_copy);
+ let parsed_header = value_deserializer
+ .read_header(scope.get_current_context())
+ .unwrap_or_default();
+ if !parsed_header {
+ let msg = v8::String::new(scope, "could not deserialize value").unwrap();
+ let exception = v8::Exception::range_error(scope, msg);
+ scope.throw_exception(exception);
+ return;
+ }
let value = value_deserializer.read_value(scope.get_current_context());
match value {
diff --git a/core/serialize_deserialize_test.js b/core/serialize_deserialize_test.js
index 6368d56db..b71bed0c9 100644
--- a/core/serialize_deserialize_test.js
+++ b/core/serialize_deserialize_test.js
@@ -19,7 +19,7 @@ function assertArrayEquals(a1, a2) {
function main() {
const emptyString = "";
- const emptyStringSerialized = [34, 0];
+ const emptyStringSerialized = [255, 13, 34, 0];
assertArrayEquals(Deno.core.serialize(emptyString), emptyStringSerialized);
assert(
Deno.core.deserialize(new Uint8Array(emptyStringSerialized)) ===
@@ -29,7 +29,7 @@ function main() {
const primitiveValueArray = ["test", "a", null, undefined];
// deno-fmt-ignore
const primitiveValueArraySerialized = [
- 65, 4, 34, 4, 116, 101, 115, 116,
+ 255, 13, 65, 4, 34, 4, 116, 101, 115, 116,
34, 1, 97, 48, 95, 36, 0, 4,
];
assertArrayEquals(
@@ -48,11 +48,11 @@ function main() {
circularObject.test = circularObject;
// deno-fmt-ignore
const circularObjectSerialized = [
- 111, 34, 4, 116, 101, 115, 116, 94,
- 0, 34, 5, 116, 101, 115, 116, 50,
- 34, 2, 100, 100, 34, 5, 116, 101,
- 115, 116, 51, 34, 2, 97, 97, 123,
- 3,
+ 255, 13, 111, 34, 4, 116, 101, 115,
+ 116, 94, 0, 34, 5, 116, 101, 115,
+ 116, 50, 34, 2, 100, 100, 34, 5,
+ 116, 101, 115, 116, 51, 34, 2, 97,
+ 97, 123, 3,
];
assertArrayEquals(