mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-20 15:41:30 -07:00
Tighten grid-size limit in Mines
Mines uses random_upto() to decide where to place mines, and random_upto() takes a maximum limit of 2^28-1, so limit the number of grid squares to that (or INT_MAX if someone's still trying to build on a 16-bit system). This avoids an assertion failure: "random_upto: Assertion `bits < 32' failed." which can be demonstrated by this save file: SAVEFILE:41:Simon Tatham's Portable Puzzle Collection VERSION :1:1 GAME :5:Mines PARAMS :5:18090 CPARAMS :5:18090 DESC :11:r9,u,MEdff6 UI :2:D0 TIME :1:0 NSTATES :1:2 STATEPOS:1:2 MOVE :4:O2,1
This commit is contained in:
7
mines.c
7
mines.c
@ -265,7 +265,14 @@ static const char *validate_params(const game_params *params, bool full)
|
||||
return "Width and height must both be at least one";
|
||||
if (params->w > SHRT_MAX || params->h > SHRT_MAX)
|
||||
return "Neither width nor height may be unreasonably large";
|
||||
/*
|
||||
* We use random_upto() to place mines, and its maximum limit is 2^28-1.
|
||||
*/
|
||||
#if (1<<28)-1 < INT_MAX
|
||||
if (params->w > ((1<<28)-1) / params->h)
|
||||
#else
|
||||
if (params->w > INT_MAX / params->h)
|
||||
#endif
|
||||
return "Width times height must not be unreasonably large";
|
||||
if (params->n < 0)
|
||||
return "Mine count may not be negative";
|
||||
|
Reference in New Issue
Block a user