@@ -514,7 +514,7 @@ static void menu_input_st_uint_cb(void *userdata, const char *str)
514514 if (str && *str)
515515 {
516516 const char *ptr = str;
517- /* Reject negative numbers (sscanf %u would silently overflow) */
517+ /* Reject negative numbers */
518518 while (*ptr == ' ')
519519 ptr++;
520520 if (*ptr >= '0' && *ptr <= '9')
@@ -1063,8 +1063,8 @@ void setting_generic_handle_change(rarch_setting_t *setting)
10631063 command_event(setting->cmd_trigger_idx, NULL);
10641064}
10651065
1066-
1067- static size_t setting_get_string_representation_int_gpu_index( rarch_setting_t *setting,
1066+ static size_t setting_get_string_representation_int_gpu_index(
1067+ rarch_setting_t *setting,
10681068 char *s, size_t len)
10691069{
10701070 size_t _len = 0;
@@ -1073,8 +1073,10 @@ static size_t setting_get_string_representation_int_gpu_index(rarch_setting_t *s
10731073 struct string_list *list = video_driver_get_gpu_api_devices(video_context_driver_get_api());
10741074 _len = snprintf(s, len, "%d", *setting->value.target.integer);
10751075 if ( list
1076+ && (*setting->value.target.integer >= 0)
10761077 && (*setting->value.target.integer < (int)list->size)
1077- && !string_is_empty(list->elems[*setting->value.target.integer].data))
1078+ && list->elems[*setting->value.target.integer].data
1079+ && *list->elems[*setting->value.target.integer].data)
10781080 {
10791081 _len += strlcpy(s + _len, " - ", len - _len);
10801082 _len += strlcpy(s + _len, list->elems[*setting->value.target.integer].data, len - _len);
@@ -3131,7 +3133,7 @@ static size_t setting_get_string_representation_video_font_path(
31313133{
31323134 if (!setting)
31333135 return 0;
3134- if (string_is_empty( setting->value.target.string) )
3136+ if (! setting->value.target.string || !*setting->value.target.string )
31353137 return strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DONT_CARE), len);
31363138 return fill_pathname(s, path_basename(setting->value.target.string),
31373139 "", len);
@@ -3243,7 +3245,8 @@ static size_t setting_get_string_representation_password(
32433245{
32443246 if (setting)
32453247 {
3246- if (!string_is_empty(setting->value.target.string))
3248+ if ( setting->value.target.string
3249+ && setting->value.target.string[0] != '\0')
32473250 return strlcpy(s, "********", len);
32483251 if (config_get_ptr()->arrays.cheevos_token[0])
32493252 return strlcpy(s, "********", len);
@@ -5120,7 +5123,7 @@ static size_t setting_get_string_representation_string_audio_device(rarch_settin
51205123{
51215124 if (!setting)
51225125 return 0;
5123- if (string_is_empty( setting->value.target.string) )
5126+ if (! setting->value.target.string || !*setting->value.target.string )
51245127 return strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DONT_CARE), len);
51255128 return strlcpy(s, setting->value.target.string, len);
51265129}
@@ -5829,9 +5832,11 @@ static bool setting_action_input_device_index_prevent(
58295832 /* Prevent accidental port 1 device index removal */
58305833 if (setting->index_offset == 0)
58315834 {
5835+ const char *name_cur = input_config_get_device_name(setting->index_offset);
5836+ const char *name_new = input_config_get_device_name(p_new);
58325837 if ( p == setting->index_offset
5833- && !string_is_empty(input_config_get_device_name(setting->index_offset))
5834- && string_is_empty(input_config_get_device_name(p_new) ))
5838+ && name_cur && *name_cur
5839+ && (!name_new || !*name_new ))
58355840 return true;
58365841 }
58375842 return false;
@@ -7204,12 +7209,11 @@ static size_t setting_get_string_representation_android_physical_keyboard(
72047209{
72057210 if (setting)
72067211 {
7207- int keyboard_vendor_id;
7208- int keyboard_product_id;
7209- if (sscanf(setting->value.target.string, "%04x:%04x ",
7210- &keyboard_vendor_id, &keyboard_product_id) != 2)
7211- return strlcpy(s, setting->value.target.string, len);
7212- return strlcpy(s, &setting->value.target.string[10], len);
7212+ const char *str = setting->value.target.string;
7213+ if ( str[4] == ':'
7214+ && str[9] == ' ')
7215+ return strlcpy(s, &str[10], len);
7216+ return strlcpy(s, str, len);
72137217 }
72147218 return 0;
72157219}
@@ -7644,21 +7648,19 @@ int menu_action_handle_setting(rarch_setting_t *setting,
76447648 info.list = menu_stack;
76457649
76467650 /* Menu background image */
7647- if (string_is_equal(info.label, MENU_ENUM_LABEL_MENU_WALLPAPER_STR))
7651+ if ( string_is_equal(info.label,
7652+ MENU_ENUM_LABEL_MENU_WALLPAPER_STR)
7653+ && settings->paths.path_menu_wallpaper[0] != '\0')
76487654 {
7649- /* Start from current wallpaper instead if available */
7650- if (!string_is_empty(settings->paths.path_menu_wallpaper))
7651- {
7652- free(info.path);
7653- info.path = strdup(settings->paths.path_menu_wallpaper);
7654- }
7655+ free(info.path);
7656+ info.path = strdup(settings->paths.path_menu_wallpaper);
76557657 }
76567658
76577659 /* Browse basedir instead and set selection to file if available */
7658- if (!string_is_empty( info.path) && !path_is_directory(info.path))
7660+ if (info.path && info.path[0] != '\0' && !path_is_directory(info.path))
76597661 {
76607662 const char *selection_path = path_basename(info.path);
7661- if (!string_is_empty( selection_path) )
7663+ if (selection_path && selection_path[0] != '\0' )
76627664 menu_driver_set_pending_selection(selection_path);
76637665 path_basedir(info.path);
76647666 }
@@ -7740,30 +7742,25 @@ int menu_action_handle_setting(rarch_setting_t *setting,
77407742 **/
77417743rarch_setting_t *menu_setting_find(const char *label)
77427744{
7743- rarch_setting_t *setting = NULL;
7744- rarch_setting_t **list = &setting;
7745+ rarch_setting_t *setting;
77457746 struct menu_state *menu_st;
77467747
77477748 if (!label)
77487749 return NULL;
77497750
7750- menu_st = menu_state_get_ptr();
7751- setting = menu_st->entries.list_settings;
7751+ menu_st = menu_state_get_ptr();
7752+ setting = menu_st->entries.list_settings;
77527753
77537754 if (!setting)
77547755 return NULL;
77557756
7756- for (; setting->type != ST_NONE; (*list = *list + 1) )
7757+ for (; setting->type != ST_NONE; setting++ )
77577758 {
7758- const char *name = setting->name;
7759- const char *short_description = setting->short_description;
7760-
7761- if (
7762- string_is_equal(label, name)
7763- && (setting->type <= ST_GROUP))
7759+ if ( setting->type <= ST_GROUP
7760+ && string_is_equal(label, setting->name))
77647761 {
7765- if (string_is_empty( short_description) )
7766- break ;
7762+ if (!setting-> short_description || !*setting->short_description )
7763+ return NULL ;
77677764
77687765 if (setting->read_handler)
77697766 setting->read_handler(setting);
@@ -7791,11 +7788,12 @@ rarch_setting_t *menu_setting_find_enum(enum msg_hash_enums enum_idx)
77917788 return NULL;
77927789 for (; setting->type != ST_NONE; (*list = *list + 1))
77937790 {
7794- if ( setting->enum_idx == enum_idx &&
7795- setting->type <= ST_GROUP)
7791+ if (
7792+ setting->type <= ST_GROUP
7793+ && setting->enum_idx == enum_idx)
77967794 {
77977795 const char *short_description = setting->short_description;
7798- if (string_is_empty( short_description) )
7796+ if (! short_description || !*short_description )
77997797 return NULL;
78007798
78017799 if (setting->read_handler)
@@ -7864,7 +7862,8 @@ static int setting_action_start_input_device_reservation_type(rarch_setting_t *s
78647862 return 0;
78657863}
78667864
7867- static int setting_action_start_input_device_reserved_device_name(rarch_setting_t *setting)
7865+ static int setting_action_start_input_device_reserved_device_name(
7866+ rarch_setting_t *setting)
78687867{
78697868 settings_t *settings = config_get_ptr();
78707869
@@ -8209,7 +8208,7 @@ static size_t setting_get_string_representation_smb_password(
82098208 if (!setting)
82108209 return 0;
82118210
8212- if (string_is_empty( setting->value.target.string) )
8211+ if (! setting->value.target.string || !*setting->value.target.string )
82138212 strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE), len);
82148213 else
82158214 {
@@ -8329,15 +8328,24 @@ static size_t get_string_representation_input_device_reservation_type(
83298328
83308329static size_t setting_get_string_representation_input_device_reserved_device_name(rarch_setting_t *setting, char *s, size_t len)
83318330{
8332- unsigned int dev_vendor_id;
8333- unsigned int dev_product_id;
8331+ const char *str;
83348332 if (!setting)
83358333 return 0;
8336- if (string_is_empty( setting->value.target.string) )
8334+ if (! setting->value.target.string || !*setting->value.target.string )
83378335 return strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NONE), len);
8338- else if (sscanf(setting->value.target.string, "%04x:%04x ", &dev_vendor_id, &dev_product_id) != 2)
8339- return strlcpy(s, setting->value.target.string, len);
8340- return strlcpy(s, &setting->value.target.string[10], len);
8336+ str = setting->value.target.string;
8337+ if ( ((str[0] >= '0' && str[0] <= '9') || (str[0] >= 'a' && str[0] <= 'f') || (str[0] >= 'A' && str[0] <= 'F'))
8338+ && ((str[1] >= '0' && str[1] <= '9') || (str[1] >= 'a' && str[1] <= 'f') || (str[1] >= 'A' && str[1] <= 'F'))
8339+ && ((str[2] >= '0' && str[2] <= '9') || (str[2] >= 'a' && str[2] <= 'f') || (str[2] >= 'A' && str[2] <= 'F'))
8340+ && ((str[3] >= '0' && str[3] <= '9') || (str[3] >= 'a' && str[3] <= 'f') || (str[3] >= 'A' && str[3] <= 'F'))
8341+ && str[4] == ':'
8342+ && ((str[5] >= '0' && str[5] <= '9') || (str[5] >= 'a' && str[5] <= 'f') || (str[5] >= 'A' && str[5] <= 'F'))
8343+ && ((str[6] >= '0' && str[6] <= '9') || (str[6] >= 'a' && str[6] <= 'f') || (str[6] >= 'A' && str[6] <= 'F'))
8344+ && ((str[7] >= '0' && str[7] <= '9') || (str[7] >= 'a' && str[7] <= 'f') || (str[7] >= 'A' && str[7] <= 'F'))
8345+ && ((str[8] >= '0' && str[8] <= '9') || (str[8] >= 'a' && str[8] <= 'f') || (str[8] >= 'A' && str[8] <= 'F'))
8346+ && str[9] == ' ')
8347+ return strlcpy(s, &str[10], len);
8348+ return strlcpy(s, str, len);
83418349}
83428350
83438351static size_t get_string_representation_input_mouse_index(
0 commit comments