From 05fac28e471742316f2c135218c6b293625ec24b Mon Sep 17 00:00:00 2001 From: Differential Privacy Team Date: Thu, 2 Apr 2026 12:37:19 -0700 Subject: [PATCH] C++: Fix signed integer overflow in AddInt64Noise. PiperOrigin-RevId: 893644746 --- cc/algorithms/numerical-mechanisms.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cc/algorithms/numerical-mechanisms.cc b/cc/algorithms/numerical-mechanisms.cc index 7db1dd1d..8d705531 100644 --- a/cc/algorithms/numerical-mechanisms.cc +++ b/cc/algorithms/numerical-mechanisms.cc @@ -217,8 +217,10 @@ int64_t LaplaceMechanism::AddInt64Noise(int64_t result) { granularity = granularity_cast_result.value; } - return RoundToNearestInt64Multiple(result, granularity) + - noise_cast_result.value; + SafeOpResult add_result = + SafeAdd(RoundToNearestInt64Multiple(result, granularity), + noise_cast_result.value); + return add_result.value; } absl::StatusOr> @@ -411,8 +413,10 @@ int64_t GaussianMechanism::AddInt64Noise(int64_t result) { granularity = granularity_cast_result.value; } - return RoundToNearestInt64Multiple(result, granularity) + - noise_cast_result.value; + SafeOpResult add_result = + SafeAdd(RoundToNearestInt64Multiple(result, granularity), + noise_cast_result.value); + return add_result.value; } } // namespace differential_privacy