From 4868e6e089f10c2b4acb1d8dc5bf66be650966d3 Mon Sep 17 00:00:00 2001 From: WillyJL <49810075+WillyJL@users.noreply.github.com> Date: Thu, 8 May 2025 07:08:27 +0100 Subject: [PATCH] CLI: Fix crash with `ir universal` command --nobuild --- CHANGELOG.md | 1 + applications/main/infrared/infrared_brute_force.c | 5 ++++- applications/main/infrared/infrared_brute_force.h | 3 ++- applications/main/infrared/infrared_cli.c | 3 ++- .../infrared/scenes/common/infrared_scene_universal_common.c | 2 +- .../infrared/scenes/infrared_scene_universal_from_file.c | 2 +- 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5413f72a..f1a10d7cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Fixed: - CLI: - Fix crash when opening CLI/qFlipper/WebUpdater if some unexpected files are present in `/ext/apps_data/cli/plugins` (by @WillyJL) + - FIx crash with `ir universal` command (by @WillyJL) - OFW: Fix subghz chat command (by @GameLord2011) - Sub-GHz: - UL: Fix CAME 24bit decoder (by @xMasterX) diff --git a/applications/main/infrared/infrared_brute_force.c b/applications/main/infrared/infrared_brute_force.c index 229307e96..83cfbbd24 100644 --- a/applications/main/infrared/infrared_brute_force.c +++ b/applications/main/infrared/infrared_brute_force.c @@ -95,7 +95,8 @@ void infrared_brute_force_set_db_filename(InfraredBruteForce* brute_force, const InfraredErrorCode infrared_brute_force_calculate_messages( InfraredBruteForce* brute_force, - bool auto_detect_buttons) { + bool auto_detect_buttons, + bool ignore_unknown_buttons) { furi_check(brute_force); furi_assert(!brute_force->is_started); furi_assert(brute_force->db_filename); @@ -154,6 +155,8 @@ InfraredErrorCode infrared_brute_force_calculate_messages( auto_detect_button_index++, furi_string_get_cstr(signal_name)); record = InfraredBruteForceRecordDict_get(brute_force->records, signal_name); + } else if(ignore_unknown_buttons) { + continue; } else { FURI_LOG_E(TAG, "Unknown signal name: %s", furi_string_get_cstr(signal_name)); furi_crash("Unknown signal name"); diff --git a/applications/main/infrared/infrared_brute_force.h b/applications/main/infrared/infrared_brute_force.h index 2434649d1..405080102 100644 --- a/applications/main/infrared/infrared_brute_force.h +++ b/applications/main/infrared/infrared_brute_force.h @@ -52,7 +52,8 @@ void infrared_brute_force_set_db_filename(InfraredBruteForce* brute_force, const */ InfraredErrorCode infrared_brute_force_calculate_messages( InfraredBruteForce* brute_force, - bool auto_detect_buttons); + bool auto_detect_buttons, + bool ignore_unknown_buttons); /** * @brief Start transmitting signals from a category stored in an InfraredBruteForce's instance dictionary. diff --git a/applications/main/infrared/infrared_cli.c b/applications/main/infrared/infrared_cli.c index 91938dc94..fc866d0e3 100644 --- a/applications/main/infrared/infrared_cli.c +++ b/applications/main/infrared/infrared_cli.c @@ -470,7 +470,8 @@ static void infrared_cli_brute_force_signals( printf("Missing signal name.\r\n"); break; } - if(infrared_brute_force_calculate_messages(brute_force, false) != InfraredErrorCodeNone) { + if(infrared_brute_force_calculate_messages(brute_force, false, true) != + InfraredErrorCodeNone) { printf("Invalid remote name.\r\n"); break; } diff --git a/applications/main/infrared/scenes/common/infrared_scene_universal_common.c b/applications/main/infrared/scenes/common/infrared_scene_universal_common.c index 50dd21e35..28f039fec 100644 --- a/applications/main/infrared/scenes/common/infrared_scene_universal_common.c +++ b/applications/main/infrared/scenes/common/infrared_scene_universal_common.c @@ -50,7 +50,7 @@ static void infrared_scene_universal_common_hide_popup(InfraredApp* infrared) { static int32_t infrared_scene_universal_common_task_callback(void* context) { InfraredApp* infrared = context; const InfraredErrorCode error = - infrared_brute_force_calculate_messages(infrared->brute_force, false); + infrared_brute_force_calculate_messages(infrared->brute_force, false, false); view_dispatcher_send_custom_event( infrared->view_dispatcher, infrared_custom_event_pack(InfraredCustomEventTypeTaskFinished, 0)); diff --git a/applications/main/infrared/scenes/infrared_scene_universal_from_file.c b/applications/main/infrared/scenes/infrared_scene_universal_from_file.c index 10a1e11d6..f1f188464 100644 --- a/applications/main/infrared/scenes/infrared_scene_universal_from_file.c +++ b/applications/main/infrared/scenes/infrared_scene_universal_from_file.c @@ -16,7 +16,7 @@ static int32_t infrared_scene_universal_from_file_task_callback(void* context) { ButtonMenu* button_menu = infrared->button_menu; InfraredBruteForce* brute_force = infrared->brute_force; const InfraredErrorCode error = - infrared_brute_force_calculate_messages(infrared->brute_force, true); + infrared_brute_force_calculate_messages(infrared->brute_force, true, false); if(!INFRARED_ERROR_PRESENT(error)) { // add btns