From 6e63859e0e5eb08b08a36bb428c9b89ed7d1be78 Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
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);
 }