ref: bb31efdbc91495a4385ca0afffa4c8bb8f564d7b
parent: c139aba078f2ec46a0e0b44142b7c982519a8263
author: Ben Harris <bjh21@bjh21.me.uk>
date: Mon Feb 13 04:31:03 EST 2023
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.
--- a/keen.c
+++ b/keen.c
@@ -1310,8 +1310,10 @@
return ret;
}
- if (*p != ',')
+ if (*p != ',') {
+ sfree(dsf);
return "Expected ',' after block structure description";
+ }
p++;
/*
@@ -1323,11 +1325,15 @@
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++;
@@ -1334,6 +1340,7 @@
while (*p && isdigit((unsigned char)*p)) p++;
}
}
+ sfree(dsf);
if (*p)
return "Too many clues for block structure";