From 22673b0f45e99ddced51ad91c58b6ab23ccb264a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 18 Dec 2025 06:05:28 +0000 Subject: [PATCH] Fix potential overflow in group hash calculation by using uint32_t multiplier Co-authored-by: jll63 <5083077+jll63@users.noreply.github.com> --- .../boost/openmethod/policies/minimal_perfect_hash.hpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/boost/openmethod/policies/minimal_perfect_hash.hpp b/include/boost/openmethod/policies/minimal_perfect_hash.hpp index 6f492e0..c07e53a 100644 --- a/include/boost/openmethod/policies/minimal_perfect_hash.hpp +++ b/include/boost/openmethod/policies/minimal_perfect_hash.hpp @@ -88,7 +88,7 @@ struct minimal_perfect_hash : type_hash { static std::size_t shift; static std::size_t table_size; // N for minimal perfect hash static std::size_t num_groups; - static std::size_t group_mult; + static std::uint32_t group_mult; // Smaller type to avoid overflow static std::size_t group_shift; static void check(std::size_t index, type_id type); @@ -179,7 +179,7 @@ template std::size_t minimal_perfect_hash::fn::num_groups; template -std::size_t minimal_perfect_hash::fn::group_mult; +std::uint32_t minimal_perfect_hash::fn::group_mult; template std::size_t minimal_perfect_hash::fn::group_shift; @@ -275,7 +275,10 @@ void minimal_perfect_hash::fn::initialize( // Try different pilot hash parameters for (std::size_t pass = 0; pass < MAX_PASSES && total_attempts < MAX_ATTEMPTS; ++pass) { mult = uniform_dist(rnd) | 1; - group_mult = uniform_dist(rnd) | 1; + // Use a smaller multiplier for group hash to avoid overflow + // We only need enough bits to distinguish between num_groups + std::uniform_int_distribution group_dist; + group_mult = group_dist(rnd) | 1; // Calculate M for pilot hash (number of bits for table_size range) std::size_t M = 0;