Skip to content

Commit 8f18e86

Browse files
committed
Extra checks
1 parent ab60e96 commit 8f18e86

2 files changed

Lines changed: 9 additions & 5 deletions

File tree

cpp/src/arrow/util/bpacking_dispatch_internal.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ using SpreadBufferUint = std::conditional_t<
9898
/// stop if it finds a byte aligned value start.
9999
template <int kPackedBitWidth, bool kIsProlog, typename Uint>
100100
int unpack_exact(const uint8_t* in, Uint* out, int batch_size, int bit_offset) {
101+
static_assert(kPackedBitWidth > 0);
102+
101103
// For the epilog we adapt the max spread since better alignment give shorter spreads
102104
ARROW_DCHECK(kIsProlog || bit_offset == 0);
103105
ARROW_DCHECK(bit_offset >= 0 && bit_offset < 8);
@@ -121,6 +123,7 @@ int unpack_exact(const uint8_t* in, Uint* out, int batch_size, int bit_offset) {
121123
while ((start_bit < start_bit_term) && (!kIsProlog || (start_bit % 8 != 0))) {
122124
const int start_byte = start_bit / 8;
123125
const int spread_bytes = ((start_bit + kPackedBitWidth - 1) / 8) - start_byte + 1;
126+
ARROW_DCHECK_LE(spread_bytes, kMaxSpreadBytes);
124127
ARROW_COMPILER_ASSUME(spread_bytes <= kMaxSpreadBytes);
125128

126129
// Reading the bytes for the current value.

cpp/src/arrow/util/rle_encoding_internal.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,11 @@ class BitPackedRun {
159159
constexpr BitPackedRun(const uint8_t* data, rle_size_t values_count,
160160
rle_size_t value_bit_width, rle_size_t max_read_bytes) noexcept
161161
: data_(data), values_count_(values_count), max_read_bytes_(max_read_bytes) {
162-
ARROW_CHECK_GE(value_bit_width, 0);
163-
ARROW_CHECK_GE(values_count_, 0);
164-
ARROW_CHECK(max_read_bytes < 0 ||
165-
bit_util::BytesForBits(value_bit_width * values_count) <= max_read_bytes);
162+
ARROW_DCHECK_GE(value_bit_width, 0);
163+
ARROW_DCHECK_GE(values_count_, 0);
164+
ARROW_DCHECK(max_read_bytes < 0 ||
165+
bit_util::BytesForBits(value_bit_width * values_count) <=
166+
max_read_bytes);
166167
}
167168

168169
constexpr rle_size_t values_count() const noexcept { return values_count_; }
@@ -172,7 +173,7 @@ class BitPackedRun {
172173
constexpr rle_size_t raw_data_size(rle_size_t value_bit_width) const noexcept {
173174
auto out = bit_util::BytesForBits(static_cast<int64_t>(value_bit_width) *
174175
static_cast<int64_t>(values_count_));
175-
ARROW_CHECK_LE(out, std::numeric_limits<rle_size_t>::max());
176+
ARROW_DCHECK_LE(out, std::numeric_limits<rle_size_t>::max());
176177
return static_cast<rle_size_t>(out);
177178
}
178179

0 commit comments

Comments
 (0)