aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2021-03-14 22:05:23 +0000
committerSimon Tatham <anakin@pobox.com>2021-03-29 20:57:42 +0100
commit1fcb61cffe538c11a11fc2ec94d6470a61df019e (patch)
treeddd7036aa62bf7351e4ce8e26f601f01030d71a1
parentff3e762fd0078836243011ca91210f32ea7d1cbd (diff)
downloadpuzzles-1fcb61cffe538c11a11fc2ec94d6470a61df019e.zip
puzzles-1fcb61cffe538c11a11fc2ec94d6470a61df019e.tar.gz
puzzles-1fcb61cffe538c11a11fc2ec94d6470a61df019e.tar.bz2
puzzles-1fcb61cffe538c11a11fc2ec94d6470a61df019e.tar.xz
Filling: fix assertion failure in 3x1 game generation.
This would come up on the game id "3x1#12345", for example. The failing assertion was (s->board[f] != EMPTY) in expand(), called in turn from learn_expand_or_one(). It looks as if the problem was that the #define SENTINEL was set too small. It was intended to be a value that can't coincide with the true size of any region - and it was set to precisely the area of the whole board. But on a 3x1 grid, that _can_ coincide with the size of a region! So a board entry was set to a real region size, and then mistaken for SENTINEL by another part of the code. Easy fix: set SENTINEL to be sz+1. Now it really can't coincide with a region area.
-rw-r--r--filling.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/filling.c b/filling.c
index 3231384..a62161a 100644
--- a/filling.c
+++ b/filling.c
@@ -310,7 +310,7 @@ static void print_board(int *board, int w, int h) {
static game_state *new_game(midend *, const game_params *, const char *);
static void free_game(game_state *);
-#define SENTINEL sz
+#define SENTINEL (sz+1)
static bool mark_region(int *board, int w, int h, int i, int n, int m) {
int j;