From f81eef29bd0ee16edbd1a2ccc212f83f882332c2 Mon Sep 17 00:00:00 2001 From: metsw24-max Date: Fri, 29 May 2026 01:19:44 +0530 Subject: [PATCH 1/2] MINOR: [C++][Parquet] Avoid int64 overflow in CheckReadRangeOrThrow --- cpp/src/parquet/page_index.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cpp/src/parquet/page_index.cc b/cpp/src/parquet/page_index.cc index 7434f2828da2..5c0ebe8fa867 100644 --- a/cpp/src/parquet/page_index.cc +++ b/cpp/src/parquet/page_index.cc @@ -335,9 +335,11 @@ class RowGroupPageIndexReaderImpl : public RowGroupPageIndexReader { } /// Page index location must be within the range of the read range. - if (index_location.offset < index_read_range->offset || - index_location.offset + index_location.length > - index_read_range->offset + index_read_range->length) { + int64_t index_end = 0; + if (::arrow::internal::AddWithOverflow(index_location.offset, index_location.length, + &index_end) || + index_location.offset < index_read_range->offset || + index_end > index_read_range->offset + index_read_range->length) { throw ParquetException("Page index location [offset:", index_location.offset, ",length:", index_location.length, "] is out of range from previous WillNeed request [offset:", From 8484106194a8be43b82c238f0cff3817d5dbed19 Mon Sep 17 00:00:00 2001 From: Sayed Kaif Date: Tue, 30 Jun 2026 12:38:16 +0530 Subject: [PATCH 2/2] Guard read range end and check offset bound first --- cpp/src/parquet/page_index.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cpp/src/parquet/page_index.cc b/cpp/src/parquet/page_index.cc index 5c0ebe8fa867..1d2faebd251c 100644 --- a/cpp/src/parquet/page_index.cc +++ b/cpp/src/parquet/page_index.cc @@ -336,10 +336,13 @@ class RowGroupPageIndexReaderImpl : public RowGroupPageIndexReader { /// Page index location must be within the range of the read range. int64_t index_end = 0; - if (::arrow::internal::AddWithOverflow(index_location.offset, index_location.length, + int64_t range_end = 0; + if (index_location.offset < index_read_range->offset || + ::arrow::internal::AddWithOverflow(index_location.offset, index_location.length, &index_end) || - index_location.offset < index_read_range->offset || - index_end > index_read_range->offset + index_read_range->length) { + ::arrow::internal::AddWithOverflow(index_read_range->offset, + index_read_range->length, &range_end) || + index_end > range_end) { throw ParquetException("Page index location [offset:", index_location.offset, ",length:", index_location.length, "] is out of range from previous WillNeed request [offset:",