Limit maximum grid size in Loopy

Every grid shape has its own limit, so this involved adding a new
interface between loopy.c and grid.c.  The limits are based on ensuring
that the co-ordinate system of the grid doesn't overflow INT_MAX and
neither do the lengths of the face and dot arrays.

Though now I come to look at it I think the actual limits of grid.c are
much lower.  Hmm.
This commit is contained in:
Ben Harris
2023-01-11 23:11:46 +00:00
parent fcda12f4b7
commit d71bba1a17
3 changed files with 210 additions and 1 deletions

View File

@ -684,6 +684,7 @@ static game_params *custom_params(const config_item *cfg)
static const char *validate_params(const game_params *params, bool full)
{
const char *err;
if (params->type < 0 || params->type >= NUM_GRID_TYPES)
return "Illegal grid type";
if (params->w < grid_size_limits[params->type].amin ||
@ -692,6 +693,8 @@ static const char *validate_params(const game_params *params, bool full)
if (params->w < grid_size_limits[params->type].omin &&
params->h < grid_size_limits[params->type].omin)
return grid_size_limits[params->type].oerr;
err = grid_validate_params(grid_types[params->type], params->w, params->h);
if (err != NULL) return err;
/*
* This shouldn't be able to happen at all, since decode_params