Skip to content

Commit e9f39d8

Browse files
mnaterradekdoulik
authored andcommitted
binaryen.js: Use malloc/free instead of stackAlloc in setMemory (WebAssembly#5646)
Memory data segments can be of large size, and might not fit in the stack. fixes WebAssembly#5595
1 parent b86d4a6 commit e9f39d8

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/js/binaryen.js-post.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2569,13 +2569,13 @@ function wrapModule(module, self = {}) {
25692569
const segmentOffset = new Array(segmentsLen);
25702570
for (let i = 0; i < segmentsLen; i++) {
25712571
const { data, offset, passive } = segments[i];
2572-
segmentData[i] = stackAlloc(data.length);
2572+
segmentData[i] = _malloc(data.length);
25732573
HEAP8.set(data, segmentData[i]);
25742574
segmentDataLen[i] = data.length;
25752575
segmentPassive[i] = passive;
25762576
segmentOffset[i] = offset;
25772577
}
2578-
return Module['_BinaryenSetMemory'](
2578+
const ret = Module['_BinaryenSetMemory'](
25792579
module, initial, maximum, strToStack(exportName),
25802580
i32sToStack(segmentData),
25812581
i8sToStack(segmentPassive),
@@ -2586,6 +2586,10 @@ function wrapModule(module, self = {}) {
25862586
memory64,
25872587
strToStack(internalName)
25882588
);
2589+
for (let i = 0; i < segmentsLen; i++) {
2590+
_free(segmentData[i]);
2591+
}
2592+
return ret;
25892593
});
25902594
};
25912595
self['hasMemory'] = function() {

0 commit comments

Comments
 (0)