From 4fb154edea642986d9108cdd172fe792b841f09e Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sun, 21 Apr 2024 15:15:34 +0200 Subject: [PATCH] GH-41317: [C++] Fix crash on invalid Parquet file --- cpp/src/arrow/table.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cpp/src/arrow/table.cc b/cpp/src/arrow/table.cc index 967e78f6b4db1..9b32632a7057a 100644 --- a/cpp/src/arrow/table.cc +++ b/cpp/src/arrow/table.cc @@ -649,6 +649,11 @@ Status TableBatchReader::ReadNext(std::shared_ptr* out) { std::min(table_.num_rows() - absolute_row_position_, max_chunksize_); std::vector chunks(table_.num_columns()); for (int i = 0; i < table_.num_columns(); ++i) { + if (chunk_numbers_[i] >= column_data_[i]->num_chunks()) { + *out = nullptr; + return Status::Invalid("Requesting too large chunk number ", chunk_numbers_[i], + " for column ", i); + } auto chunk = column_data_[i]->chunk(chunk_numbers_[i]).get(); int64_t chunk_remaining = chunk->length() - chunk_offsets_[i];