This is an automated email from the ASF dual-hosted git repository.

zeroshade pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-go.git


The following commit(s) were added to refs/heads/main by this push:
     new 27c84bfe fix(parquet/metadata): reject negative row-group indices in 
Subset (#1055)
27c84bfe is described below

commit 27c84bfe7c4ddb2618f93c089892d1cc3bd5feb4
Author: Minh Vu <[email protected]>
AuthorDate: Wed Aug 5 19:35:10 2026 +0200

    fix(parquet/metadata): reject negative row-group indices in Subset (#1055)
    
    ### Rationale for this change
    
    `FileMetaData.Subset` checked only the upper bound. Negative indices
    passed validation and later caused a runtime bounds panic despite the
    method having an error return.
    
    ### What changes are included in this PR?
    
    Reject indices below zero as well as indices at or above the row-group
    count.
    
    ### Are these changes tested?
    
    Yes. Regression cases cover an isolated negative index and mixed
    valid/invalid input.
    
    `go test ./parquet/metadata`
    
    ### Are there any user-facing changes?
    
    Negative selections now return an error instead of panicking.
---
 parquet/metadata/file.go          | 2 +-
 parquet/metadata/metadata_test.go | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/parquet/metadata/file.go b/parquet/metadata/file.go
index c3969640..f9035db2 100644
--- a/parquet/metadata/file.go
+++ b/parquet/metadata/file.go
@@ -425,7 +425,7 @@ func (f *FileMetaData) AppendRowGroups(other *FileMetaData) 
error {
 // row groups by index
 func (f *FileMetaData) Subset(rowGroups []int) (*FileMetaData, error) {
        for _, i := range rowGroups {
-               if i < len(f.RowGroups) {
+               if i >= 0 && i < len(f.RowGroups) {
                        continue
                }
                return nil, fmt.Errorf("parquet: this file only has %d row 
groups, but requested a subset including row group: %d", len(f.RowGroups), i)
diff --git a/parquet/metadata/metadata_test.go 
b/parquet/metadata/metadata_test.go
index fccfbe4b..9c043911 100644
--- a/parquet/metadata/metadata_test.go
+++ b/parquet/metadata/metadata_test.go
@@ -236,6 +236,12 @@ func TestBuildAccess(t *testing.T) {
        sub, err := faccessor.Subset([]int{2, 0})
        require.NoError(t, err)
        assert.True(t, faccessor1.Equals(sub))
+
+       for _, rowGroups := range [][]int{{-1}, {0, -1}} {
+               sub, err := faccessor.Subset(rowGroups)
+               require.Error(t, err)
+               assert.Nil(t, sub)
+       }
 }
 
 func TestV1VersionMetadata(t *testing.T) {

Reply via email to