mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
Mines: forbid moves that flag or unflag an exposed square
interpret_move() couldn't generate them, but execute_move() also needs to forbid them to defend against corrupt save files. I don't think this actually caused any crashes, but it did cause unexpected "1" squares not adjacent to mines.
This commit is contained in:
4
mines.c
4
mines.c
@ -2701,7 +2701,9 @@ static game_state *execute_move(const game_state *from, const char *move)
|
|||||||
while (*move) {
|
while (*move) {
|
||||||
if (move[0] == 'F' &&
|
if (move[0] == 'F' &&
|
||||||
sscanf(move+1, "%d,%d", &cx, &cy) == 2 &&
|
sscanf(move+1, "%d,%d", &cx, &cy) == 2 &&
|
||||||
cx >= 0 && cx < from->w && cy >= 0 && cy < from->h) {
|
cx >= 0 && cx < from->w && cy >= 0 && cy < from->h &&
|
||||||
|
(ret->grid[cy * from->w + cx] == -1 ||
|
||||||
|
ret->grid[cy * from->w + cx] == -2)) {
|
||||||
ret->grid[cy * from->w + cx] ^= (-2 ^ -1);
|
ret->grid[cy * from->w + cx] ^= (-2 ^ -1);
|
||||||
} else if (move[0] == 'O' &&
|
} else if (move[0] == 'O' &&
|
||||||
sscanf(move+1, "%d,%d", &cx, &cy) == 2 &&
|
sscanf(move+1, "%d,%d", &cx, &cy) == 2 &&
|
||||||
|
Reference in New Issue
Block a user