From 38cf1955e5861f67d385ede006c5b5d1701aca8d Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Thu, 12 Jan 2023 21:00:22 +0000 Subject: [PATCH] Palisade: don't leak memory on a bad move Invalid moves can turn up in corrupted save files, and puzzles shouldn't leak memory when failing to load a corrupted save file. --- palisade.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/palisade.c b/palisade.c index 865cfd8..036ab1f 100644 --- a/palisade.c +++ b/palisade.c @@ -1020,7 +1020,7 @@ static game_state *execute_move(const game_state *state, const char *move) for (i = 0; i < wh && move[i]; ++i) ret->borders[i] = (move[i] & BORDER_MASK) | DISABLED(~move[i] & BORDER_MASK); - if (i < wh || move[i]) return NULL; /* leaks `ret', then we die */ + if (i < wh || move[i]) goto badmove; ret->cheated = ret->completed = true; return ret; } @@ -1036,7 +1036,7 @@ static game_state *execute_move(const game_state *state, const char *move) ret->borders[y*w + x] ^= flag; } - if (*move) return NULL; /* leaks `ret', then we die */ + if (*move) goto badmove; if (!ret->completed) ret->completed = is_solved(&ret->shared->params, ret->shared->clues, @@ -1045,7 +1045,7 @@ static game_state *execute_move(const game_state *state, const char *move) return ret; badmove: - sfree(ret); + free_game(ret); return NULL; }