diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-11 22:00:49 +0000 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-11 22:00:49 +0000 |
| commit | 896a73bd7ff8cbde44e97d89cef57346478f0072 (patch) | |
| tree | 686c6641f753851d49fd26e11d6569beda4e96c1 /flood.c | |
| parent | c0b2f0fc98e87392dcb4dd8faf3076786fc49367 (diff) | |
| download | puzzles-896a73bd7ff8cbde44e97d89cef57346478f0072.zip puzzles-896a73bd7ff8cbde44e97d89cef57346478f0072.tar.gz puzzles-896a73bd7ff8cbde44e97d89cef57346478f0072.tar.bz2 puzzles-896a73bd7ff8cbde44e97d89cef57346478f0072.tar.xz | |
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
Diffstat (limited to 'flood.c')
| -rw-r--r-- | flood.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -938,15 +938,16 @@ static game_state *execute_move(const game_state *state, const char *move) 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++; } } |