From df783b93e3271264a8d54f90876f41a80ef2247d Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Mon, 13 Feb 2023 00:14:22 +0000 Subject: [PATCH] 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". --- cube.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cube.c b/cube.c index 1969bfb..99f392a 100644 --- a/cube.c +++ b/cube.c @@ -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"; }