ref: 896a73bd7ff8cbde44e97d89cef57346478f0072
parent: c0b2f0fc98e87392dcb4dd8faf3076786fc49367
author: Ben Harris <bjh21@bjh21.me.uk>
date: Sat Feb 11 17:00:49 EST 2023
Cleanly reject more ill-formed solve moves in Flood The fix in e4112b3 was incomplete: there was another assertion that could be failed by a save file with an ill-formed solve move. That now gets rejected properly. Here's an example save file to demonstrate the problem: SAVEFILE:41:Simon Tatham's Portable Puzzle Collection GAME :5:Flood PARAMS :7:6x6c6m0 CPARAMS :7:6x6c6m0 DESC :39:000000000000000000000000000000000000,00 NSTATES :1:2 STATEPOS:1:2 MOVE :1:S
--- a/flood.c
+++ b/flood.c
@@ -938,15 +938,16 @@
sol->moves = snewn(sol->nmoves, char);
for (i = 0, p = move; i < sol->nmoves; i++) {
- assert(*p);
+ if (!*p) {
+ badsolve:
+ sfree(sol->moves);
+ sfree(sol);
+ return NULL;
+ };
sol->moves[i] = atoi(p);
p += strspn(p, "0123456789");
if (*p) {
- if (*p != ',') {
- sfree(sol->moves);
- sfree(sol);
- return NULL;
- }
+ if (*p != ',') goto badsolve;
p++;
}
}