From cb381123ff69d9cd76c17313cae779a6127167eb Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 9 Sep 2016 18:39:38 +0200 Subject: [PATCH] fix some calendar-related leaks and issues --- src/calendar.c | 32 ++++++++++++++++++++++---------- src/eressea.c | 3 ++- src/kernel/xmlreader.c | 2 ++ tests/test-turn.lua | 1 + 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/calendar.c b/src/calendar.c index 0f4617642..7a27328a7 100644 --- a/src/calendar.c +++ b/src/calendar.c @@ -38,22 +38,34 @@ void calendar_cleanup(void) free(agename); - for (i = 0; i != seasons; ++i) { - free(seasonnames[i]); + if (seasonnames) { + for (i = 0; i != seasons; ++i) { + free(seasonnames[i]); + } + free(seasonnames); + seasonnames = 0; } - free(seasonnames); - for (i = 0; i != months_per_year; ++i) { - free(monthnames[i]); + if (monthnames) { + for (i = 0; i != months_per_year; ++i) { + free(monthnames[i]); + } + free(storms); + storms = 0; + free(month_season); + month_season = 0; + free(monthnames); + monthnames = 0; } - free(storms); - free(month_season); - free(monthnames); for (i = 0; i != weeks_per_month; ++i) { - free(weeknames[i]); - free(weeknames2[i]); + if (weeknames) + free(weeknames[i]); + if (weeknames2) + free(weeknames2[i]); } free(weeknames); + weeknames = 0; free(weeknames2); + weeknames2 = 0; } diff --git a/src/eressea.c b/src/eressea.c index c1ae4d73a..1fc69762b 100755 --- a/src/eressea.c +++ b/src/eressea.c @@ -26,6 +26,7 @@ #include #include +#include "calendar.h" #include "chaos.h" #include "creport.h" #include "items.h" @@ -50,8 +51,8 @@ void game_done(void) #ifdef REPORT_FORMAT_NR report_cleanup(); #endif - calendar_cleanup(); #endif + calendar_cleanup(); free_functions(); free_config(); free_locales(); diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 19d661cc6..f3f866351 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -471,6 +471,8 @@ static int parse_calendar(xmlDocPtr doc) } xmlXPathFreeObject(xpathMonths); xmlXPathFreeObject(xpathSeasons); + xmlFree(newyear); + newyear = NULL; } xmlXPathFreeObject(xpathCalendars); xmlXPathFreeContext(xpath); diff --git a/tests/test-turn.lua b/tests/test-turn.lua index 03178b74d..826ffc00f 100644 --- a/tests/test-turn.lua +++ b/tests/test-turn.lua @@ -3,3 +3,4 @@ turn = get_turn() eressea.free_game() print("trying to read data from " .. turn) eressea.read_game(turn .. ".dat") +eressea.free_game()