From bd91d8df9abc2194e648e257b9994d3d325c7a34 Mon Sep 17 00:00:00 2001 From: Mathias Nater Date: Mon, 10 Apr 2023 18:36:34 +0200 Subject: binaryen.js: Use malloc/free instead of stackAlloc in setMemory (#5646) Memory data segments can be of large size, and might not fit in the stack. fixes #5595 --- src/js/binaryen.js-post.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 35f5d9a5c..1101c1aab 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -2569,13 +2569,13 @@ function wrapModule(module, self = {}) { const segmentOffset = new Array(segmentsLen); for (let i = 0; i < segmentsLen; i++) { const { data, offset, passive } = segments[i]; - segmentData[i] = stackAlloc(data.length); + segmentData[i] = _malloc(data.length); HEAP8.set(data, segmentData[i]); segmentDataLen[i] = data.length; segmentPassive[i] = passive; segmentOffset[i] = offset; } - return Module['_BinaryenSetMemory']( + const ret = Module['_BinaryenSetMemory']( module, initial, maximum, strToStack(exportName), i32sToStack(segmentData), i8sToStack(segmentPassive), @@ -2586,6 +2586,10 @@ function wrapModule(module, self = {}) { memory64, strToStack(internalName) ); + for (let i = 0; i < segmentsLen; i++) { + _free(segmentData[i]); + } + return ret; }); }; self['hasMemory'] = function() { -- cgit v1.2.3