From cebb95b0e334900155c6b3ecbc57cea31823ff38 Mon Sep 17 00:00:00 2001 From: ctult Date: Thu, 24 Dec 2015 23:04:15 -0700 Subject: [PATCH] a bit of static analysis possible memory leaks and null pointer dereferences --- configuration.c | 2 +- dynamic.c | 7 ++++--- frontend/drivers/platform_linux.c | 4 ++++ frontend/drivers/platform_wii.c | 1 + retroarch.c | 9 +++++++-- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/configuration.c b/configuration.c index 3ff08a1acc..f27bfa0def 100644 --- a/configuration.c +++ b/configuration.c @@ -2126,7 +2126,7 @@ bool config_load_remap(void) if (!core_name || !game_name) return false; - if (core_name[0] == '\0' || game_name == '\0') + if (core_name[0] == '\0' || game_name[0] == '\0') return false; RARCH_LOG("Remaps: core name: %s\n", core_name); diff --git a/dynamic.c b/dynamic.c index b08e73ef1c..c577da427d 100644 --- a/dynamic.c +++ b/dynamic.c @@ -634,10 +634,11 @@ bool rarch_environment_cb(unsigned cmd, void *data) { struct retro_variable *var = (struct retro_variable*)data; - RARCH_LOG("Environ GET_VARIABLE %s:\n", var->key); - if (var) + if (var) { + RARCH_LOG("Environ GET_VARIABLE %s:\n", var->key); var->value = NULL; - RARCH_LOG("\t%s\n", var->value ? var->value : "N/A"); + RARCH_LOG("\t%s\n", var->value ? var->value : "N/A"); + } } break; diff --git a/frontend/drivers/platform_linux.c b/frontend/drivers/platform_linux.c index 0ce55a306d..1c80928b25 100644 --- a/frontend/drivers/platform_linux.c +++ b/frontend/drivers/platform_linux.c @@ -757,8 +757,12 @@ static struct android_app* android_app_create(ANativeActivity* activity, if (pipe(msgpipe)) { RARCH_ERR("could not create pipe: %s.\n", strerror(errno)); + if(android_app->savedState) + free(android_app->savedState); + free(android_app); return NULL; } + android_app->msgread = msgpipe[0]; android_app->msgwrite = msgpipe[1]; diff --git a/frontend/drivers/platform_wii.c b/frontend/drivers/platform_wii.c index 0481cb0d59..361656f606 100644 --- a/frontend/drivers/platform_wii.c +++ b/frontend/drivers/platform_wii.c @@ -176,6 +176,7 @@ void system_exec_wii(const char *_path, bool should_load_game) /* don't use memcpy, there might be an overlap. */ memmove(EXECUTE_ADDR, dol, size); DCFlushRange(EXECUTE_ADDR, size); + free(dol); dol_copy_argv_path(path, should_load_game ? game_path : NULL); diff --git a/retroarch.c b/retroarch.c index 6133bbaf8e..4e9dbaa8da 100644 --- a/retroarch.c +++ b/retroarch.c @@ -359,8 +359,12 @@ static void set_paths_redirect(const char *path) rarch_system_info_t *info = NULL; runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &info); - - if (global && info->info.library_name && + if (!global) + { + RARCH_WARN("set_paths_redirect was sent a NULL \"global\" pointer."); + return; + } + if (info->info.library_name && (info->info.library_name[0] != '\0')) global_library_name_hash = msg_hash_calculate(info->info.library_name); @@ -1638,6 +1642,7 @@ int rarch_defer_core(void *data, const char *dir, } else #endif + if (info) strlcpy(new_core_path, info->path, sizeof(new_core_path)); /* There are multiple deferred cores and a