ref: 9394e9c74bdb48dc1c74693bcb41fd35f8fc743c
parent: 7364ce8e266d947be146d635958a7b282752aac6
author: Ben Harris <[email protected]>
date: Wed Feb 15 09:07:34 EST 2023
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
--- a/mines.c
+++ b/mines.c
@@ -265,7 +265,14 @@
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";