diff --git a/cpp/src/parquet/encoder.cc b/cpp/src/parquet/encoder.cc index 75eccc96a44..cbfdc4d164f 100644 --- a/cpp/src/parquet/encoder.cc +++ b/cpp/src/parquet/encoder.cc @@ -541,6 +541,12 @@ class DictEncoderImpl : public EncoderImpl, virtual public DictEncoder { size_t buffer_position = buffered_indices_.size(); buffered_indices_.resize(buffer_position + static_cast(data.length() - data.null_count())); + if (buffered_indices_.size() > + static_cast(std::numeric_limits::max())) { + throw ParquetException("Total dictionary indices count (", + buffered_indices_.size(), + ") exceeds maximum int value"); + } ::arrow::internal::VisitSetBitRunsVoid( data.null_bitmap_data(), data.offset(), data.length(), [&](int64_t position, int64_t length) {