From bb31efdbc91495a4385ca0afffa4c8bb8f564d7b Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Mon, 13 Feb 2023 09:31:03 +0000 Subject: [PATCH] Fix memory leaks in Keen's validate_desc() Keen uses a DSF to validate its game descriptions and almost always failed to free it, even when the validation succeeded. --- keen.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/keen.c b/keen.c index be06013..98ddc0c 100644 --- a/keen.c +++ b/keen.c @@ -1310,8 +1310,10 @@ static const char *validate_desc(const game_params *params, const char *desc) return ret; } - if (*p != ',') + if (*p != ',') { + sfree(dsf); return "Expected ',' after block structure description"; + } p++; /* @@ -1323,17 +1325,22 @@ static const char *validate_desc(const game_params *params, const char *desc) if (*p == 'a' || *p == 'm') { /* these clues need no validation */ } else if (*p == 'd' || *p == 's') { - if (dsf_size(dsf, i) != 2) + if (dsf_size(dsf, i) != 2) { + sfree(dsf); return "Subtraction and division blocks must have area 2"; + } } else if (!*p) { + sfree(dsf); return "Too few clues for block structure"; } else { + sfree(dsf); return "Unrecognised clue type"; } p++; while (*p && isdigit((unsigned char)*p)) p++; } } + sfree(dsf); if (*p) return "Too many clues for block structure";