From 3b578c7f60b9478ea8f751cd664e6fa5ac9c3b45 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Tue, 31 Oct 2023 17:10:03 +0800 Subject: [PATCH] fix: overflow in RestoreHalfBlock --- src/int2048.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/int2048.cpp b/src/int2048.cpp index 51ac867..9c2b985 100644 --- a/src/int2048.cpp +++ b/src/int2048.cpp @@ -638,11 +638,12 @@ void int2048::RestoreHalfBlock() { assert(this->num_length % int2048::kNum == 0); int blocks_num = this->num_length / int2048::kNum; for (int i = 0; i < blocks_num - 1; i++) { - val[i] *= int2048::kNTTBlockBase; - val[i] %= int2048::kStoreBase; + val[i] = ((long long)val[i] * int2048::kNTTBlockBase) % int2048::kStoreBase; val[i] += val[i + 1] / int2048::kNTTBlockBase; } - (val[blocks_num - 1] *= int2048::kNTTBlockBase) %= int2048::kStoreBase; + val[blocks_num - 1] = + ((long long)val[blocks_num - 1] * int2048::kNTTBlockBase) % + int2048::kStoreBase; while (this->num_length > 0 && val[this->num_length / int2048::kNum - 1] == 0) this->num_length -= int2048::kNum; }