Skip to content

Commit 4c60d05

Browse files
committed
fix: RescaleWouldCauseDataLoss
1 parent 1ea7efd commit 4c60d05

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/iceberg/util/decimal.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,13 @@ bool RescaleWouldCauseDataLoss(const Decimal& value, int32_t delta_scale,
278278
return res->second != 0;
279279
}
280280

281+
int128_t max_safe_value = std::numeric_limits<int128_t>::max() / multiplier.value();
282+
int128_t min_safe_value = std::numeric_limits<int128_t>::min() / multiplier.value();
283+
if (value.value() > max_safe_value || value.value() < min_safe_value) {
284+
// Overflow would happen — treat as data loss
285+
return true;
286+
}
287+
281288
*result = value * multiplier;
282289
return (value < 0) ? *result > value : *result < value;
283290
}

0 commit comments

Comments
 (0)