fix: overflow in RestoreHalfBlock
This commit is contained in:
@ -638,11 +638,12 @@ void int2048::RestoreHalfBlock() {
|
|||||||
assert(this->num_length % int2048::kNum == 0);
|
assert(this->num_length % int2048::kNum == 0);
|
||||||
int blocks_num = this->num_length / int2048::kNum;
|
int blocks_num = this->num_length / int2048::kNum;
|
||||||
for (int i = 0; i < blocks_num - 1; i++) {
|
for (int i = 0; i < blocks_num - 1; i++) {
|
||||||
val[i] *= int2048::kNTTBlockBase;
|
val[i] = ((long long)val[i] * int2048::kNTTBlockBase) % int2048::kStoreBase;
|
||||||
val[i] %= int2048::kStoreBase;
|
|
||||||
val[i] += val[i + 1] / int2048::kNTTBlockBase;
|
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)
|
while (this->num_length > 0 && val[this->num_length / int2048::kNum - 1] == 0)
|
||||||
this->num_length -= int2048::kNum;
|
this->num_length -= int2048::kNum;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user