From a1f9614c079b4c8f429c8b05745d06b65148c164 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 20 Mar 2022 20:28:50 +0100 Subject: [PATCH] Backported: Fix crash on get index for non-existing string As _buttons and _axes have both valid string and nullptr. When iterating over them, if given key exists it will work correctly. But if given key does not exist, it will end up with String::operator=(nullptr). As String constructor from nullptr exists, I use it. - Snowapril - https://github.com/godotengine/godot/commit/c77b71003532237aeef466ce46c12ff01948bc2e --- main/input_default.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/main/input_default.cpp b/main/input_default.cpp index 3616ec175..bd394906f 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -1338,11 +1338,15 @@ String InputDefault::get_joy_button_string(int p_button) { int InputDefault::get_joy_button_index_from_string(String p_button) { for (int i = 0; i < JOY_BUTTON_MAX; i++) { - if (p_button == _buttons[i]) { + if (_buttons[i] == nullptr) { + break; + } + if (p_button == String(_buttons[i])) { return i; } } - ERR_FAIL_V(-1); + + ERR_FAIL_V_MSG(-1, vformat("Could not find a button index matching the string \"%s\".", p_button)); } int InputDefault::get_unused_joy_id() { @@ -1361,9 +1365,13 @@ String InputDefault::get_joy_axis_string(int p_axis) { int InputDefault::get_joy_axis_index_from_string(String p_axis) { for (int i = 0; i < JOY_AXIS_MAX; i++) { - if (p_axis == _axes[i]) { + if (_axes[i] == nullptr) { + break; + } + if (p_axis == String(_axes[i])) { return i; } } - ERR_FAIL_V(-1); + + ERR_FAIL_V_MSG(-1, vformat("Could not find an axis index matching the string \"%s\".", p_axis)); }