Skip to content

Commit 1f48565

Browse files
committed
Fix ArrayBuffer deserialization
1 parent f5f8e67 commit 1f48565

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

packages/seroval/src/binary/deserializer.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,14 @@ async function deserializeArrayBuffer(ctx: DeserializerContext) {
627627
const id = await deserializeId(ctx, SerovalBinaryType.ArrayBuffer);
628628
const length = await deserializeUint(ctx);
629629
const bytes = await ensureChunk(ctx, length);
630-
upsert(ctx, id, createImmediateTask(bytes.buffer));
630+
upsert(
631+
ctx,
632+
id,
633+
createImmediateTask(
634+
// We can't really use the buffer directly.
635+
bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength),
636+
),
637+
);
631638
}
632639

633640
async function deserializeTypedArrayInner(
@@ -934,7 +941,7 @@ async function deserializeRootInner(ctx: DeserializerContext, ref: number) {
934941
// first, check for resolvers
935942
const resolver = ctx.refs.resolvers.get(ref);
936943
// If there's a resolver, we use that first
937-
if (resolver) {
944+
if (resolver && ctx.refs.types.get(ref) !== SerovalBinaryType.Promise) {
938945
ctx.root.found = true;
939946
await resolver.p;
940947
}

0 commit comments

Comments
 (0)