diff options
| author | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-13 00:14:22 +0000 |
|---|---|---|
| committer | Ben Harris <bjh21@bjh21.me.uk> | 2023-02-13 21:05:32 +0000 |
| commit | df783b93e3271264a8d54f90876f41a80ef2247d (patch) | |
| tree | 90475f6b7621267e5629682abc33e291b1a00130 | |
| parent | da2767a3f9bf4abb0436157972366202ad53a407 (diff) | |
| download | puzzles-df783b93e3271264a8d54f90876f41a80ef2247d.zip puzzles-df783b93e3271264a8d54f90876f41a80ef2247d.tar.gz puzzles-df783b93e3271264a8d54f90876f41a80ef2247d.tar.bz2 puzzles-df783b93e3271264a8d54f90876f41a80ef2247d.tar.xz | |
Avoid division by zero in Cube grid-size checks
On a triangular grid, Cube allows either d1 or d2 (but not both) to be
zero, so it's important to check that each one is not zero before
dividing by it.
The crash could be triggered by, for instance "cube t0x2".
| -rw-r--r-- | cube.c | 8 |
1 files changed, 5 insertions, 3 deletions
@@ -567,9 +567,11 @@ static const char *validate_params(const game_params *params, bool full) * can safely multiply them and compare against the * _remaining_ space. */ - if ((params->d1 > INT_MAX / params->d1) || - (params->d2 > (INT_MAX - params->d1*params->d1) / params->d2) || - (params->d1*params->d2 > (INT_MAX - params->d1*params->d1 - + if ((params->d1 > 0 && params->d1 > INT_MAX / params->d1) || + (params->d2 > 0 && + params->d2 > (INT_MAX - params->d1*params->d1) / params->d2) || + (params->d2 > 0 && + params->d1*params->d2 > (INT_MAX - params->d1*params->d1 - params->d2*params->d2) / params->d2)) return "Grid area must not be unreasonably large"; } |