aboutsummaryrefslogtreecommitdiff
path: root/core/sys/wasm
diff options
context:
space:
mode:
authorJonathan Tron <jonathan@tron.name>2025-03-21 09:38:23 +0100
committerJonathan Tron <jonathan@tron.name>2025-03-21 09:38:23 +0100
commit2bccd07426ef3288d53ea357e29ee1a87c8873ff (patch)
tree62afc7102ded7e82533b395e57017766c0ce67d4 /core/sys/wasm
parent631406eeccf9c2dbf9d2914809b72fb853a63002 (diff)
Prevent registering the same event listener twice on the same element with the exact same data in wasm.
Diffstat (limited to 'core/sys/wasm')
-rw-r--r--core/sys/wasm/js/odin.js11
1 files changed, 9 insertions, 2 deletions
diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js
index 1599aa4fe..b3a49523b 100644
--- a/core/sys/wasm/js/odin.js
+++ b/core/sys/wasm/js/odin.js
@@ -1662,6 +1662,10 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
if (element == undefined) {
return false;
}
+ let key = listener_key(id, name, data, callback, !!use_capture);
+ if (wasmMemoryInterface.listenerMap.has(key)) {
+ return false;
+ }
let listener = (e) => {
let event_data = {};
@@ -1672,7 +1676,6 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
onEventReceived(event_data, data, callback);
};
- let key = listener_key(id, name, data, callback, !!use_capture);
wasmMemoryInterface.listenerMap.set(key, listener);
element.addEventListener(name, listener, !!use_capture);
return true;
@@ -1681,6 +1684,11 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
add_window_event_listener: (name_ptr, name_len, name_code, data, callback, use_capture) => {
let name = wasmMemoryInterface.loadString(name_ptr, name_len);
let element = window;
+ let key = listener_key('window', name, data, callback, !!use_capture);
+ if (wasmMemoryInterface.listenerMap.has(key)) {
+ return false;
+ }
+
let listener = (e) => {
let event_data = {};
event_data.id_ptr = 0;
@@ -1690,7 +1698,6 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) {
onEventReceived(event_data, data, callback);
};
- let key = listener_key('window', name, data, callback, !!use_capture);
wasmMemoryInterface.listenerMap.set(key, listener);
element.addEventListener(name, listener, !!use_capture);
return true;