Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ci/scripts/cpp_test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,9 @@ fi

if [ "${ARROW_FUZZING}" == "ON" ]; then
# Fuzzing regression tests
# Some fuzz regression files may trigger huge memory allocations,
# let the allocator return null instead of aborting.
export ASAN_OPTIONS="$ASAN_OPTIONS allocator_may_return_null=1"
"${binary_output_dir}/arrow-ipc-stream-fuzz" "${ARROW_TEST_DATA}"/arrow-ipc-stream/crash-*
"${binary_output_dir}/arrow-ipc-stream-fuzz" "${ARROW_TEST_DATA}"/arrow-ipc-stream/*-testcase-*
"${binary_output_dir}/arrow-ipc-file-fuzz" "${ARROW_TEST_DATA}"/arrow-ipc-file/*-testcase-*
Expand Down
1 change: 1 addition & 0 deletions cpp/build-support/run-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ function setup_sanitizers() {

# Set up suppressions for AddressSanitizer
ASAN_OPTIONS="$ASAN_OPTIONS suppressions=$ROOT/build-support/asan-suppressions.txt"
ASAN_OPTIONS="$ASAN_OPTIONS allocator_may_return_null=1"
export ASAN_OPTIONS

# Set up suppressions for LeakSanitizer
Expand Down
14 changes: 13 additions & 1 deletion cpp/src/parquet/column_reader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1684,7 +1684,7 @@ class TypedRecordReader : public TypedColumnReaderImpl<DType>,
}
}

void ReserveValues(int64_t extra_values) {
virtual void ReserveValues(int64_t extra_values) {
const int64_t new_values_capacity =
UpdateCapacity(values_capacity_, values_written_, extra_values);
if (new_values_capacity > values_capacity_) {
Expand Down Expand Up @@ -1968,6 +1968,12 @@ class FLBARecordReader final : public TypedRecordReader<FLBAType>,
return ::arrow::ArrayVector{std::move(chunk)};
}

void ReserveValues(int64_t extra_values) override {
ARROW_DCHECK(!uses_values_);
TypedRecordReader::ReserveValues(extra_values);
PARQUET_THROW_NOT_OK(array_builder_.Reserve(extra_values));
}

void ReadValuesDense(int64_t values_to_read) override {
int64_t num_decoded = this->current_decoder_->DecodeArrowNonNull(
static_cast<int>(values_to_read), &array_builder_);
Expand Down Expand Up @@ -2042,6 +2048,12 @@ class ByteArrayChunkedRecordReader final : public TypedRecordReader<ByteArrayTyp
return result;
}

void ReserveValues(int64_t extra_values) override {
ARROW_DCHECK(!uses_values_);
TypedRecordReader::ReserveValues(extra_values);
PARQUET_THROW_NOT_OK(accumulator_.builder->Reserve(extra_values));
}

void ReadValuesDense(int64_t values_to_read) override {
int64_t num_decoded = this->current_decoder_->DecodeArrowNonNull(
static_cast<int>(values_to_read), &accumulator_);
Expand Down
Loading