From d9f4675a5104e321b1d806363abe7fd6edef92c8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 5 Aug 2018 16:59:59 +0200 Subject: [PATCH] menu_settings_free - prevent null pointer indirections --- menu/menu_setting.c | 18 ++++++++++-------- menu/menu_setting.h | 2 +- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index b2d84ee582..cd15732d03 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -8740,14 +8740,14 @@ static bool setting_append_list( return true; } -bool menu_setting_free(void *data) +void menu_setting_free(void *data) { unsigned values, n; rarch_setting_t *setting = (rarch_setting_t*)data; rarch_setting_t **list = &setting; if (!setting) - return false; + return; /* Free data which was previously tagged */ for (; setting_get_type(setting) != ST_NONE; (*list = *list + 1)) @@ -8756,24 +8756,26 @@ bool menu_setting_free(void *data) switch (1 << n) { case SD_FREE_FLAG_VALUES: - free((void*)setting->values); + if (setting->values) + free((void*)setting->values); setting->values = NULL; break; case SD_FREE_FLAG_NAME: - free((void*)setting->name); + if (setting->name) + free((void*)setting->name); setting->name = NULL; break; case SD_FREE_FLAG_SHORT: - free((void*)setting->short_description); + if (setting->short_description) + free((void*)setting->short_description); setting->short_description = NULL; break; default: break; } - free(data); - - return true; + if (data) + free(data); } static void menu_setting_terminate_last(rarch_setting_t *list, unsigned pos) diff --git a/menu/menu_setting.h b/menu/menu_setting.h index 6fc32bdbfd..8ef46126c8 100644 --- a/menu/menu_setting.h +++ b/menu/menu_setting.h @@ -162,7 +162,7 @@ void menu_settings_list_current_add_enum_value_idx( rarch_setting_info_t *list_info, enum msg_hash_enums enum_idx); -bool menu_setting_free(void *data); +void menu_setting_free(void *data); bool settings_list_append(rarch_setting_t **list, rarch_setting_info_t *list_info);