diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2023-01-28 19:06:24 +0000 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2023-01-28 19:06:24 +0000 |
| commit | e4112b322e299a461ddc46daee741c73733e186d (patch) | |
| tree | 84a454783adc1ac508fd1841852073f7f04d9e56 | |
| parent | eb1ae3f3d041f9ff0c11b04613a695be11bda706 (diff) | |
| download | puzzles-e4112b322e299a461ddc46daee741c73733e186d.zip puzzles-e4112b322e299a461ddc46daee741c73733e186d.tar.gz puzzles-e4112b322e299a461ddc46daee741c73733e186d.tar.bz2 puzzles-e4112b322e299a461ddc46daee741c73733e186d.tar.xz | |
Cleanly reject ill-formed solve moves in Flood
A solve move containing characters other than digits and commas would
cause an assertion failure, "*p == ','", in execute_move(). Such a move
can't as far as I know be generated in play, but can be read from a
corrupt save file.
Here's a sample of such a save file:
SAVEFILE:41:Simon Tatham's Portable Puzzle Collection
VERSION :1:1
GAME :5:Flood
PARAMS :7:3x3c6m5
CPARAMS :7:3x3c6m5
DESC :12:403011503,10
NSTATES :1:2
STATEPOS:1:2
SOLVE :2:SA
| -rw-r--r-- | flood.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -942,7 +942,11 @@ static game_state *execute_move(const game_state *state, const char *move) sol->moves[i] = atoi(p); p += strspn(p, "0123456789"); if (*p) { - assert(*p == ','); + if (*p != ',') { + sfree(sol->moves); + sfree(sol); + return NULL; + } p++; } } |