From d557023dc0d86aa1e070fc89f3610c9973483370 Mon Sep 17 00:00:00 2001 From: kiwec Date: Tue, 11 Feb 2025 16:48:05 +0100 Subject: [PATCH] Fix borsh map deserialization getSpan() was computing value size from the wrong offset. The constructor also caused wrong calculations when only one of the layouts has a variable size. --- ts/packages/borsh/src/index.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/ts/packages/borsh/src/index.ts b/ts/packages/borsh/src/index.ts index 3e1e8bde0a..94a7641e95 100644 --- a/ts/packages/borsh/src/index.ts +++ b/ts/packages/borsh/src/index.ts @@ -299,7 +299,7 @@ class MapEntryLayout extends LayoutCls<[K, V]> { valueLayout: Layout; constructor(keyLayout: Layout, valueLayout: Layout, property?: string) { - super(keyLayout.span + valueLayout.span, property); + super(0, property); this.keyLayout = keyLayout; this.valueLayout = valueLayout; } @@ -322,9 +322,10 @@ class MapEntryLayout extends LayoutCls<[K, V]> { } getSpan(b: Buffer, offset?: number): number { - return ( - this.keyLayout.getSpan(b, offset) + this.valueLayout.getSpan(b, offset) - ); + offset = offset || 0; + const keySpan = this.keyLayout.getSpan(b, offset); + const valueSpan = this.valueLayout.getSpan(b, offset + keySpan); + return keySpan + valueSpan; } }