From c77b71003532237aeef466ce46c12ff01948bc2e Mon Sep 17 00:00:00 2001 From: snowapril Date: Wed, 16 Mar 2022 23:13:02 +0900 Subject: [PATCH] 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. --- main/input_default.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/main/input_default.cpp b/main/input_default.cpp index 3616ec175a97..c39094109c30 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -1338,11 +1338,14 @@ 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 +1364,12 @@ 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)); }