From 14189c08a229c5e5223ae00d9f9a67217b461d15 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 13 Oct 2014 16:55:15 -0400 Subject: [PATCH] frontend: Fix possible memory leaks in lakka, rgui, and rmenu --- frontend/menu/disp/lakka.c | 19 ++++++++----------- frontend/menu/disp/rgui.c | 14 ++++++++++---- frontend/menu/disp/rmenu.c | 3 +++ 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/frontend/menu/disp/lakka.c b/frontend/menu/disp/lakka.c index a50bba2bd9..0d11c521d5 100644 --- a/frontend/menu/disp/lakka.c +++ b/frontend/menu/disp/lakka.c @@ -1118,31 +1118,28 @@ static void *lakka_init(void) } menu = (menu_handle_t*)calloc(1, sizeof(*menu)); - if (!menu) return NULL; + menu->userdata = (lakka_handle_t*)calloc(1, sizeof(lakka_handle_t)); + if (!menu->userdata) + { + free(menu); + return NULL; + } lakka_init_core_info(menu); - menu->userdata = (lakka_handle_t*)calloc(1, sizeof(lakka_handle_t)); - - if (!menu->userdata) - return NULL; - lakka = (lakka_handle_t*)menu->userdata; - - if (!lakka) - return NULL; - lakka->num_categories = g_extern.core_info ? (g_extern.core_info->count + 1) : 1; - lakka->categories = (menu_category_t*) calloc(lakka->num_categories, sizeof(menu_category_t)); if (!lakka->categories) { + free(menu->userdata); free(menu); + return NULL; } diff --git a/frontend/menu/disp/rgui.c b/frontend/menu/disp/rgui.c index a055872540..3e4cd6ddb9 100644 --- a/frontend/menu/disp/rgui.c +++ b/frontend/menu/disp/rgui.c @@ -408,17 +408,20 @@ static void *rgui_init(void) menu->userdata = (rgui_handle_t*)calloc(1, sizeof(rgui_handle_t)); if (!menu->userdata) + { + free(menu); return NULL; + } rgui_handle_t *rgui = (rgui_handle_t*)menu->userdata; - - if (!rgui) - return NULL; - + menu->frame_buf = (uint16_t*)malloc(400 * 240 * sizeof(uint16_t)); if (!menu->frame_buf) + { + free(menu); return NULL; + } menu->width = 320; menu->height = 240; @@ -431,6 +434,9 @@ static void *rgui_init(void) RARCH_ERR("No font bitmap or binary, abort"); rarch_main_command(RARCH_CMD_QUIT_RETROARCH); + + free(menu->userdata); + free(menu); return NULL; } diff --git a/frontend/menu/disp/rmenu.c b/frontend/menu/disp/rmenu.c index 562a04d793..a1314bd497 100644 --- a/frontend/menu/disp/rmenu.c +++ b/frontend/menu/disp/rmenu.c @@ -308,7 +308,10 @@ static void *rmenu_init(void) menu_texture = (struct texture_image*)calloc(1, sizeof(*menu_texture)); if (!menu_texture) + { + free(menu); return NULL; + } return menu; }