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
This commit is contained in:
Ben Harris
2023-02-11 22:00:49 +00:00
parent c0b2f0fc98
commit 896a73bd7f

13
flood.c
View File

@ -938,15 +938,16 @@ static game_state *execute_move(const game_state *state, const char *move)
sol->moves = snewn(sol->nmoves, char); sol->moves = snewn(sol->nmoves, char);
for (i = 0, p = move; i < sol->nmoves; i++) { 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); sol->moves[i] = atoi(p);
p += strspn(p, "0123456789"); p += strspn(p, "0123456789");
if (*p) { if (*p) {
if (*p != ',') { if (*p != ',') goto badsolve;
sfree(sol->moves);
sfree(sol);
return NULL;
}
p++; p++;
} }
} }