From d577aaecab09506988a657fa257c4d0ab85d0cd6 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Mon, 13 Feb 2023 11:21:11 +0000 Subject: Free new game_state properly in Mosaic's execute_move() Using sfree() rather than free_game() in the error paths meant that various arrays referenced from the game_state weren't properly freed. Also one error path didn't free the game_state at all. --- mosaic.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mosaic.c b/mosaic.c index 842c211..74a06d0 100644 --- a/mosaic.c +++ b/mosaic.c @@ -1282,8 +1282,10 @@ static game_state *execute_move(const game_state *state, const char *move) move_params[i] = atoi(p); while (*p && isdigit((unsigned char)*p)) p++; if (i+1 < nparams) { - if (*p != ',') + if (*p != ',') { + free_game(new_state); return NULL; + } p++; } } @@ -1299,7 +1301,7 @@ static game_state *execute_move(const game_state *state, const char *move) } cell = get_coords(new_state, new_state->cells_contents, x, y); if (cell == NULL) { - sfree(new_state); + free_game(new_state); return NULL; } if (*cell >= STATE_OK_NUM) { @@ -1369,7 +1371,7 @@ static game_state *execute_move(const game_state *state, const char *move) cell = get_coords(new_state, new_state->cells_contents, x + (dirX * i), y + (dirY * i)); if (cell == NULL) { - sfree(new_state); + free_game(new_state); return NULL; } if ((*cell & STATE_OK_NUM) == 0) { -- cgit v1.1