diff --git a/src/cudecomp.cc b/src/cudecomp.cc index 1da8bf8..9f3f3c6 100644 --- a/src/cudecomp.cc +++ b/src/cudecomp.cc @@ -240,7 +240,9 @@ static void checkConfig(cudecompHandle_t handle, const cudecompGridDescConfig_t* if (!autotune_halos) { checkHaloCommBackend(config->halo_comm_backend); } checkRankOrder(config->rank_order); - int pdims_prod = config->pdims[0] * config->pdims[1]; + if (config->pdims[0] < 0 || config->pdims[1] < 0) { THROW_INVALID_USAGE("pdims values are invalid"); } + + int64_t pdims_prod = static_cast(config->pdims[0]) * config->pdims[1]; if (pdims_prod == 0) { if (config->pdims[0] != 0 || config->pdims[1] != 0) { THROW_INVALID_USAGE("pdims values are invalid"); } } else if (pdims_prod != handle->nranks) { diff --git a/tests/ctest/api_tests.cc b/tests/ctest/api_tests.cc index 3f04e8d..32cae83 100644 --- a/tests/ctest/api_tests.cc +++ b/tests/ctest/api_tests.cc @@ -863,6 +863,11 @@ TEST_F(ApiGridDescCreateTest, RejectsInvalidConfigs) { config.pdims[1] = 1; expectGridDescCreateInvalid(config); + config = distributedConfig(); + config.pdims[0] = -2; + config.pdims[1] = -2; + expectGridDescCreateInvalid(config); + config = distributedConfig(); config.rank_order = static_cast(999); expectGridDescCreateInvalid(config);