From 6e63859e0e5eb08b08a36bb428c9b89ed7d1be78 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 12 Sep 2014 19:27:16 -0400 Subject: [PATCH] state_tracker: Guard against a possible calloc failure and fix state_tracker_free Checks if the passed in tracker is actually valid before attempting to free its members. --- gfx/state_tracker.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gfx/state_tracker.c b/gfx/state_tracker.c index 682ce66322..85c0ea75c0 100644 --- a/gfx/state_tracker.c +++ b/gfx/state_tracker.c @@ -85,6 +85,14 @@ state_tracker_t* state_tracker_init(const struct state_tracker_info *info) tracker->info = (struct state_tracker_internal*) calloc(info->info_elem, sizeof(struct state_tracker_internal)); + + if (!tracker->info) + { + RARCH_ERR("%s: Allocation of state tracker info failed.", __FUNCTION__); + free(tracker); + return NULL; + } + tracker->info_elem = info->info_elem; for (i = 0; i < info->info_elem; i++) @@ -138,10 +146,14 @@ state_tracker_t* state_tracker_init(const struct state_tracker_info *info) void state_tracker_free(state_tracker_t *tracker) { - free(tracker->info); + if (tracker) + { + free(tracker->info); #ifdef HAVE_PYTHON - py_state_free(tracker->py); + py_state_free(tracker->py); #endif + } + free(tracker); }