From 750aa7608aec8f77cc2eb68a1f488b056e2fdd62 Mon Sep 17 00:00:00 2001 From: metsw24-max Date: Thu, 4 Jun 2026 12:09:58 +0530 Subject: [PATCH] avoid int32 overflow in BitPackedRunDecoder::GetBatch offset --- cpp/src/arrow/util/rle_encoding_internal.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cpp/src/arrow/util/rle_encoding_internal.h b/cpp/src/arrow/util/rle_encoding_internal.h index 161a926f5dbb..c640fdbe5b90 100644 --- a/cpp/src/arrow/util/rle_encoding_internal.h +++ b/cpp/src/arrow/util/rle_encoding_internal.h @@ -371,15 +371,15 @@ class BitPackedRunDecoder { /// left. [[nodiscard]] rle_size_t GetBatch(value_type* out, rle_size_t batch_size, rle_size_t value_bit_width) { - const int bits_read = values_read_ * value_bit_width; - const int bytes_fully_read = bits_read / 8; + const int64_t bits_read = static_cast(values_read_) * value_bit_width; + const int64_t bytes_fully_read = bits_read / 8; const uint8_t* unread_data = data_ + bytes_fully_read; const ::arrow::internal::UnpackOptions opts{ /* .batch_size= */ std::min(batch_size, remaining()), /* .bit_width= */ value_bit_width, - /* .bit_offset= */ bits_read % 8, - /* .max_read_bytes= */ max_read_bytes_ - bytes_fully_read, + /* .bit_offset= */ static_cast(bits_read % 8), + /* .max_read_bytes= */ static_cast(max_read_bytes_ - bytes_fully_read), }; if constexpr (std::is_same_v) {