Skip to content

Commit 4a4847f

Browse files
committed
try fix ci
1 parent b998842 commit 4a4847f

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

cpp/src/arrow/array/builder_binary.h

+19-7
Original file line numberDiff line numberDiff line change
@@ -307,22 +307,27 @@ class BaseBinaryBuilder
307307
Status AppendBinaryWithLengths(std::string_view binary, const int32_t* value_lengths,
308308
int64_t length) {
309309
ARROW_RETURN_NOT_OK(Reserve(length));
310-
UnsafeAppendToBitmap(/*valid_bytes=*/nullptr, length);
310+
UnsafeAppendToBitmap(/*valid_bytes=*/NULLPTR, length);
311311
// All values is valid
312312
int64_t accum_length = 0;
313313
for (int64_t i = 0; i < length; ++i) {
314314
accum_length += value_lengths[i];
315315
}
316-
if (ARROW_PREDICT_FALSE(binary.size() < accum_length)) {
316+
if (ARROW_PREDICT_FALSE(binary.size() < static_cast<size_t>(accum_length))) {
317317
return Status::Invalid("Binary data is too short");
318318
}
319+
if (ARROW_PREDICT_FALSE(binary.size() + value_data_builder_.length() >
320+
std::numeric_limits<int32_t>::max())) {
321+
return Status::Invalid("Append binary data too long");
322+
}
319323
std::string_view sub_data = binary.substr(0, accum_length);
320324
ARROW_RETURN_NOT_OK(value_data_builder_.Append(
321325
reinterpret_cast<const uint8_t*>(sub_data.data()), sub_data.size()));
322326
accum_length = 0;
323327
const int64_t initialize_offset = value_data_builder_.length();
324328
for (int64_t i = 0; i < length; ++i) {
325-
offsets_builder_.UnsafeAppend(initialize_offset + accum_length);
329+
offsets_builder_.UnsafeAppend(
330+
static_cast<int32_t>(initialize_offset + accum_length));
326331
accum_length += value_lengths[i];
327332
}
328333
return Status::OK();
@@ -331,18 +336,23 @@ class BaseBinaryBuilder
331336
Status AppendBinaryWithLengths(std::string_view binary, const int32_t* value_lengths,
332337
int64_t length, int64_t null_count,
333338
const uint8_t* valid_bits, int64_t valid_bits_offset) {
334-
if (valid_bits == nullptr || null_count == 0) {
339+
if (valid_bits == NULLPTR || null_count == 0) {
335340
return AppendBinaryWithLengths(binary, value_lengths, length);
336341
}
337342
ARROW_RETURN_NOT_OK(Reserve(length));
338343
int64_t accum_length = 0;
339344
for (int64_t i = 0; i < length; ++i) {
340345
accum_length += value_lengths[i];
341346
}
342-
if (ARROW_PREDICT_FALSE(binary.size() < accum_length)) {
347+
if (ARROW_PREDICT_FALSE(binary.size() < static_cast<size_t>(accum_length))) {
343348
return Status::Invalid("Binary data is too short");
344349
}
345350
const int64_t original_offset = value_data_builder_.length();
351+
if (ARROW_PREDICT_FALSE(original_offset + accum_length) >
352+
std::numeric_limits<int32_t>::max()) {
353+
return Status::Invalid("Append binary data too long");
354+
}
355+
346356
std::string_view sub_data = binary.substr(0, accum_length);
347357
ARROW_RETURN_NOT_OK(value_data_builder_.Append(
348358
reinterpret_cast<const uint8_t*>(sub_data.data()), sub_data.size()));
@@ -351,13 +361,15 @@ class BaseBinaryBuilder
351361
RETURN_NOT_OK(VisitNullBitmapInline(
352362
valid_bits, valid_bits_offset, length, null_count,
353363
[&]() {
354-
offsets_builder_.UnsafeAppend(original_offset + accum_length);
364+
offsets_builder_.UnsafeAppend(
365+
static_cast<int32_t>(original_offset + accum_length));
355366
accum_length += value_lengths[length_idx];
356367
++length_idx;
357368
return Status::OK();
358369
},
359370
[&]() {
360-
offsets_builder_.UnsafeAppend(original_offset + accum_length);
371+
offsets_builder_.UnsafeAppend(
372+
static_cast<int32_t>(original_offset + accum_length));
361373
return Status::OK();
362374
}));
363375
return Status::OK();

0 commit comments

Comments
 (0)