Oh, that does sound tricky, including in some single threaded scenarios, like the one below...
How would you modify the code below to avoid landing in invalid memory? I can take a guess but ... still learning about the JS side of it
function decompress(data / * Uint8Array */) {
let dataPtr = Module._malloc(data.length);
let dataHeap = new Uint8Array(Module.HEAPU8.buffer, dataPtr, data.length);
dataHeap.set(data);
let num_bytes_decomp= Module.C_getContentSize(dataHeap.byteOffset, data.length);
let decompPtr = Module._malloc(num_bytes_decom);
let decompHeap = new Uint8Array(Module.HEAPU8.buffer, decompPtr, num_bytes_decomp);
let len = Module.C_decompress(decompHeap.byteOffset, num_bytes_decomp, dataHeap.byteOffset, data.length);
let result = new Uint8Array(decompHeap.subarray(0, len));
Module._free(dataHeap.byteOffset);
Module._free(decompHeap.byteOffset);
return result
}
Thank you in advance