From 575e331fd18a9b2a59840fae670b6a7eb8db4e50 Mon Sep 17 00:00:00 2001 From: LibretroAdmin Date: Thu, 25 Aug 2022 16:31:54 +0200 Subject: [PATCH] If we already know the length of the string, use strldup instead. Avoids the internal strlen call inside strdup, and strdup is a deprecated function starting from MSVC2005 anyways. NOTE: Do NOT pass STRLEN_CONST as n parameter to strldup, it needs to be at least +1 character higher than the strlen return value of the same string --- core_updater_list.c | 4 ++-- libretro-common/file/config_file.c | 4 ++-- menu/drivers/ozone.c | 4 ++-- menu/drivers/xmb.c | 4 ++-- menu/menu_displaylist.c | 34 +++++++++++++++--------------- menu/menu_driver.c | 8 +++---- tasks/task_content.c | 14 ++++++------ tasks/task_file_transfer.c | 2 +- tasks/task_http.c | 9 +++++--- 9 files changed, 43 insertions(+), 40 deletions(-) diff --git a/core_updater_list.c b/core_updater_list.c index 4793592d5b..f7d5110b9f 100644 --- a/core_updater_list.c +++ b/core_updater_list.c @@ -576,7 +576,7 @@ static bool core_updater_list_set_core_info( if (!string_is_empty(core_info->description)) entry->description = strdup(core_info->description); else - entry->description = strdup(""); + entry->description = strldup("", sizeof("")); /* licenses_list */ if (!string_is_empty(core_info->licenses)) @@ -592,7 +592,7 @@ static bool core_updater_list_set_core_info( * cores must have a valid/complete core info file) */ entry->display_name = strdup(filename_str); entry->is_experimental = true; - entry->description = strdup(""); + entry->description = strldup("", sizeof("")); } return true; diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 96e2113b3f..0101833c0e 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -211,7 +211,7 @@ static char *config_file_extract_value(char *line) line++; /* Note: From this point on, an empty value - * string is valid - and in this case, strdup("") + * string is valid - and in this case, strldup("", sizeof("")) * will be returned * > If we instead return NULL, the the entry * is ignored completely - which means we cannot @@ -254,7 +254,7 @@ static char *config_file_extract_value(char *line) return strdup(value); } - return strdup(""); + return strldup("", sizeof("")); } /* Move semantics? */ diff --git a/menu/drivers/ozone.c b/menu/drivers/ozone.c index c804c61ccb..5a3f5ee756 100644 --- a/menu/drivers/ozone.c +++ b/menu/drivers/ozone.c @@ -4350,7 +4350,7 @@ static void ozone_init_horizontal_list(ozone_handle_t *ozone, info.path = strdup(dir_playlist); info.label = strdup( msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB)); - info.exts = strdup("lpl"); + info.exts = strldup("lpl", sizeof("lpl")); info.type_default = FILE_TYPE_PLAIN; info.enum_idx = MENU_ENUM_LABEL_PLAYLISTS_TAB; @@ -10847,7 +10847,7 @@ static bool ozone_menu_init_list(void *data) info.label = strdup( msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU)); - info.exts = strdup("lpl"); + info.exts = strldup("lpl", sizeof("lpl")); info.type_default = FILE_TYPE_PLAIN; info.enum_idx = MENU_ENUM_LABEL_MAIN_MENU; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index bf281f9071..380c48499d 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2210,7 +2210,7 @@ static void xmb_init_horizontal_list(xmb_handle_t *xmb) info.path = strdup(dir_playlist); info.label = strdup( msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB)); - info.exts = strdup("lpl"); + info.exts = strldup("lpl", sizeof("lpl")); info.type_default = FILE_TYPE_PLAIN; info.enum_idx = MENU_ENUM_LABEL_PLAYLISTS_TAB; @@ -7622,7 +7622,7 @@ static bool xmb_menu_init_list(void *data) info.label = strdup( msg_hash_to_str(MENU_ENUM_LABEL_MAIN_MENU)); - info.exts = strdup("lpl"); + info.exts = strldup("lpl", sizeof("lpl")); info.type_default = FILE_TYPE_PLAIN; info.enum_idx = MENU_ENUM_LABEL_MAIN_MENU; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 59b27cbc7b..3317ba9422 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -13724,7 +13724,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, if (info->path) free(info->path); info->type_default = FILE_TYPE_RDB; - info->exts = strdup(".rdb"); + info->exts = strldup(".rdb", sizeof(".rdb")); info->enum_idx = MENU_ENUM_LABEL_PLAYLISTS_TAB; load_content = false; use_filebrowser = true; @@ -13740,7 +13740,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, if (info->path) free(info->path); info->type_default = FILE_TYPE_CURSOR; - info->exts = strdup("dbc"); + info->exts = strldup("dbc", sizeof("dbc")); load_content = false; use_filebrowser = true; info->path = strdup(settings->paths.directory_cursor); @@ -13923,51 +13923,51 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, { case DISPLAYLIST_VIDEO_FILTERS: info->type_default = FILE_TYPE_VIDEOFILTER; - info->exts = strdup("filt"); + info->exts = strldup("filt", sizeof("filt")); break; case DISPLAYLIST_CONFIG_FILES: info->type_default = FILE_TYPE_CONFIG; - info->exts = strdup("cfg"); + info->exts = strldup("cfg", sizeof("cfg")); break; case DISPLAYLIST_REMAP_FILES: - info->type_default = FILE_TYPE_REMAP; - info->exts = strdup("rmp"); + info->type_default = FILE_TYPE_REMAP; + info->exts = strldup("rmp", sizeof("rmp")); break; case DISPLAYLIST_RGUI_THEME_PRESETS: info->type_default = FILE_TYPE_RGUI_THEME_PRESET; - info->exts = strdup("cfg"); + info->exts = strldup("cfg", sizeof("cfg")); break; case DISPLAYLIST_STREAM_CONFIG_FILES: info->type_default = FILE_TYPE_STREAM_CONFIG; - info->exts = strdup("cfg"); + info->exts = strldup("cfg", sizeof("cfg")); break; case DISPLAYLIST_RECORD_CONFIG_FILES: info->type_default = FILE_TYPE_RECORD_CONFIG; - info->exts = strdup("cfg"); + info->exts = strldup("cfg", sizeof("cfg")); break; case DISPLAYLIST_OVERLAYS: info->type_default = FILE_TYPE_OVERLAY; - info->exts = strdup("cfg"); + info->exts = strldup("cfg", sizeof("cfg")); break; case DISPLAYLIST_FONTS: info->type_default = FILE_TYPE_FONT; - info->exts = strdup("ttf"); + info->exts = strldup("ttf", sizeof("ttf")); break; case DISPLAYLIST_VIDEO_FONTS: info->type_default = FILE_TYPE_VIDEO_FONT; - info->exts = strdup("ttf"); + info->exts = strldup("ttf", sizeof("ttf")); break; case DISPLAYLIST_AUDIO_FILTERS: info->type_default = FILE_TYPE_AUDIOFILTER; - info->exts = strdup("dsp"); + info->exts = strldup("dsp", sizeof("dsp")); break; case DISPLAYLIST_CHEAT_FILES: info->type_default = FILE_TYPE_CHEAT; - info->exts = strdup("cht"); + info->exts = strldup("cht", sizeof("cht")); break; case DISPLAYLIST_MANUAL_CONTENT_SCAN_DAT_FILES: info->type_default = FILE_TYPE_MANUAL_SCAN_DAT; - info->exts = strdup("dat|xml"); + info->exts = strldup("dat|xml", sizeof("dat|xml")); break; case DISPLAYLIST_FILE_BROWSER_SELECT_SIDELOAD_CORE: { @@ -14002,7 +14002,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, use_filebrowser = true; if (!string_is_empty(info->exts)) free(info->exts); - info->exts = strdup("lay|zip"); + info->exts = strldup("lay|zip", sizeof("lay|zip")); break; #endif case DISPLAYLIST_CONTENT_HISTORY: @@ -14012,7 +14012,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, use_filebrowser = true; if (!string_is_empty(info->exts)) free(info->exts); - info->exts = strdup("lpl"); + info->exts = strldup("lpl", sizeof("lpl")); break; case DISPLAYLIST_DATABASE_PLAYLISTS: case DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL: diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 3258e21706..7c7ee29511 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -2253,7 +2253,7 @@ static bool menu_driver_displaylist_push_internal( if (!string_is_empty(info->label)) free(info->label); - info->exts = strdup("lpl"); + info->exts = strldup("lpl", sizeof("lpl")); info->label = strdup( msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB)); @@ -2271,7 +2271,7 @@ static bool menu_driver_displaylist_push_internal( if (!string_is_empty(info->label)) free(info->label); - info->exts = strdup("lpl"); + info->exts = strldup("lpl", sizeof("lpl")); info->label = strdup( msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB)); @@ -2289,7 +2289,7 @@ static bool menu_driver_displaylist_push_internal( if (!string_is_empty(info->label)) free(info->label); - info->exts = strdup("lpl"); + info->exts = strldup("lpl", sizeof("lpl")); info->label = strdup( msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB)); @@ -2322,7 +2322,7 @@ static bool menu_driver_displaylist_push_internal( if (!string_is_empty(info->label)) free(info->label); - info->exts = strdup("lpl"); + info->exts = strldup("lpl", sizeof("lpl")); info->label = strdup( msg_hash_to_str(MENU_ENUM_LABEL_PLAYLISTS_TAB)); diff --git a/tasks/task_content.c b/tasks/task_content.c index e8726e0f1c..51c33e20b4 100644 --- a/tasks/task_content.c +++ b/tasks/task_content.c @@ -1347,7 +1347,7 @@ static void content_load_init_wrap( int *argc, char **argv) { *argc = 0; - argv[(*argc)++] = strdup("retroarch"); + argv[(*argc)++] = strldup("retroarch", sizeof("retroarch")); if (args->content_path) { @@ -1359,38 +1359,38 @@ static void content_load_init_wrap( { RARCH_LOG("[Core]: %s\n", msg_hash_to_str(MSG_NO_CONTENT_STARTING_DUMMY_CORE)); - argv[(*argc)++] = strdup("--menu"); + argv[(*argc)++] = strldup("--menu", sizeof("--menu")); } #endif if (args->sram_path) { - argv[(*argc)++] = strdup("-s"); + argv[(*argc)++] = strldup("-s", sizeof("-s")); argv[(*argc)++] = strdup(args->sram_path); } if (args->state_path) { - argv[(*argc)++] = strdup("-S"); + argv[(*argc)++] = strldup("-S", sizeof("-S")); argv[(*argc)++] = strdup(args->state_path); } if (args->config_path) { - argv[(*argc)++] = strdup("-c"); + argv[(*argc)++] = strldup("-c", sizeof("-c")); argv[(*argc)++] = strdup(args->config_path); } #ifdef HAVE_DYNAMIC if (args->libretro_path) { - argv[(*argc)++] = strdup("-L"); + argv[(*argc)++] = strldup("-L", sizeof("-L")); argv[(*argc)++] = strdup(args->libretro_path); } #endif if (args->verbose) - argv[(*argc)++] = strdup("-v"); + argv[(*argc)++] = strldup("-v", sizeof("-v")); } /** diff --git a/tasks/task_file_transfer.c b/tasks/task_file_transfer.c index 4ad9420187..0b6385a194 100644 --- a/tasks/task_file_transfer.c +++ b/tasks/task_file_transfer.c @@ -125,7 +125,7 @@ void task_file_load_handler(retro_task_t *task) if (task_get_cancelled(task)) { - task_set_error(task, strdup("Task canceled.")); + task_set_error(task, strldup("Task canceled.", sizeof("Task canceled."))); task_set_finished(task, true); } } diff --git a/tasks/task_http.c b/tasks/task_http.c index cb40adcf90..f4eb9704f7 100644 --- a/tasks/task_http.c +++ b/tasks/task_http.c @@ -189,7 +189,8 @@ task_finished: free(tmp); if (task_get_cancelled(task)) - task_set_error(task, strdup("Task cancelled.")); + task_set_error(task, + strldup("Task cancelled.", sizeof("Task cancelled."))); else { data = (http_transfer_data_t*)malloc(sizeof(*data)); @@ -200,7 +201,8 @@ task_finished: task_set_data(task, data); if (!task->mute) - task_set_error(task, strdup("Download failed.")); + task_set_error(task, strldup("Download failed.", + sizeof("Download failed."))); } } else @@ -215,7 +217,8 @@ task_finished: net_http_delete(http->handle); } else if (http->error) - task_set_error(task, strdup("Internal error.")); + task_set_error(task, strldup("Internal error.", + sizeof("Internal error."))); free(http); }