From 9aeffe4e8088335ecfe3c98e9ce69ae6f9d42d77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Mon, 21 Apr 2025 09:44:48 +0200 Subject: [PATCH] * Fix to read unaligned bytes --- packages/job/src/job_browser.pp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/job/src/job_browser.pp b/packages/job/src/job_browser.pp index aa4d7d4..0c65fe8 100644 --- a/packages/job/src/job_browser.pp +++ b/packages/job/src/job_browser.pp @@ -955,11 +955,27 @@ var var Len, Ptr: TWasmNativeInt; aWords: TJSUint16Array; + aRawBytes, + aBytes: TJSUint8Array; begin Len:=ReadWasmNativeInt; Ptr:=ReadWasmNativeInt; - aWords:=TJSUint16Array.New(View.buffer, Ptr,Len); - Result:=DecodeUTF16Buffer(aWords); + if (Ptr mod 2)=0 then + begin + // Aligned, we can directly use the memory + aWords:=TJSUint16Array.New(View.buffer, Ptr,Len); + end + else + begin + // Unaligned, We cannot directly use the memory + // So create a uint8 buffer and copy using from. + aRawBytes:=TJSUint8Array.new(View.buffer, Ptr,Len*2); + // Hopefully aligned + aBytes:=TJSUint8Array.New(aRawBytes.Buffer); + // Reinterpret + aWords:=TJSUint16Array.New(aBytes.buffer); + end; + Result:=DecodeUTF16Buffer(aWords); {$IFDEF VERBOSEJOB} Writeln('ReadUnicodeString : ',Result); {$ENDIF}