summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Nater <mathiasnater@gmail.com>2023-04-10 18:36:34 +0200
committerGitHub <noreply@github.com>2023-04-10 16:36:34 +0000
commitbd91d8df9abc2194e648e257b9994d3d325c7a34 (patch)
tree304661dbcf8e3c6efd2a816527468a0033a8640d
parent27a6574615b1f2419105ef76dc325ef1153baef3 (diff)
downloadbinaryen-bd91d8df9abc2194e648e257b9994d3d325c7a34.tar.gz
binaryen-bd91d8df9abc2194e648e257b9994d3d325c7a34.tar.bz2
binaryen-bd91d8df9abc2194e648e257b9994d3d325c7a34.zip
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
-rw-r--r--src/js/binaryen.js-post.js8
1 files changed, 6 insertions, 2 deletions
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() {