From 35000602533513fd9d703ff44ca5e4abfe15e911 Mon Sep 17 00:00:00 2001 From: Paul Guyot Date: Mon, 20 Nov 2023 23:21:41 +0100 Subject: [PATCH] Fix emscripten register callback crash Fix an issue where second argument (x[1]) was incorrectly processed when register_callback/1 was called Signed-off-by: Paul Guyot --- CHANGELOG.md | 1 + src/platforms/emscripten/src/lib/platform_nifs.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d095d375..45848df03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed hard fault on STM32 durung malloc on boards with more than one bank of sram - Fixed invalid src_clk error on ESP-IDF >= 5.0 - Fixed changed default to `AVM_USE_32BIT_FLOAT=on` for STM32 platform to enable use of single precision hardware FPU on F4/F7 devices. +- Fixed a bug where emscripten `register_*_callback/1` functions would use x[1] as second argument ### Changed diff --git a/src/platforms/emscripten/src/lib/platform_nifs.c b/src/platforms/emscripten/src/lib/platform_nifs.c index 2bd1cc35e..a208ec2ce 100644 --- a/src/platforms/emscripten/src/lib/platform_nifs.c +++ b/src/platforms/emscripten/src/lib/platform_nifs.c @@ -207,9 +207,9 @@ static bool get_register_callback_parameters(Context *ctx, int argc, term argv[] } bool use_capture_opt = false; bool prevent_default_opt = false; - if (argc >= 1 && term_is_atom(argv[1])) { + if (argc > 1 && term_is_atom(argv[1])) { use_capture_opt = argv[1] == TRUE_ATOM; - } else if (argc >= 1 && term_is_list(argv[1])) { + } else if (argc > 1 && term_is_list(argv[1])) { use_capture_opt = interop_proplist_get_value_default(argv[1], globalcontext_make_atom(ctx->global, ATOM_STR("\xB", "use_capture")), FALSE_ATOM) == TRUE_ATOM; prevent_default_opt = interop_proplist_get_value_default(argv[1], globalcontext_make_atom(ctx->global, ATOM_STR("\xF", "prevent_default")), FALSE_ATOM) == TRUE_ATOM; }