From cd7e42f0b6e9ad0ddd6f796b543017140409173a Mon Sep 17 00:00:00 2001 From: Jack Baker Date: Mon, 25 Apr 2022 20:35:36 -0700 Subject: [PATCH] Fix export object retrieval in WebAssembly.instantiate() --- content/init.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/content/init.js b/content/init.js index 9cc0fbd..43b056c 100644 --- a/content/init.js +++ b/content/init.js @@ -825,20 +825,26 @@ const webAssemblyInstantiateHook = function(inObject, importObject = {}) { return new Promise(function(resolve, reject) { oldWebAssemblyInstantiate(instrumentedObject, importObject).then(function(instanceObject) { + let instance = instanceObject; + + if (typeof instanceObject.instance !== "undefined") { + instance = instanceObject.instance; + } + if (typeof memoryDescriptor !== "undefined" && memoryDescriptor.type === "export") { - memoryInstance = getMemoryFromObject(instanceObject.exports, memoryDescriptor); + let exportObject = instance.exports; + + if (typeof exportObject !== "object") { + colorError("WebAssembly.instantiate() failed to retrieve export object for instantiated module"); + } + + memoryInstance = getMemoryFromObject(exportObject, memoryDescriptor); } if (!(memoryInstance instanceof WebAssembly.Memory)) { colorError("WebAssembly.instantiate() failed to retrieve a WebAssembly.Memory object"); } - let instance = instanceObject; - - if (typeof instanceObject.instance !== "undefined") { - instance = instanceObject.instance; - } - cetus = new Cetus({ memory: memoryInstance, watchpointExports: [instance.exports.addWatch],