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 b433d4b2 fix(parquet/metadata): return error for missing column 
metadata (#1137)
b433d4b2 is described below

commit b433d4b24ff5af950c31ff63a4b978a49be4f8e6
Author: Minh Vu <[email protected]>
AuthorDate: Tue Aug 11 17:23:33 2026 +0200

    fix(parquet/metadata): return error for missing column metadata (#1137)
    
    ### Rationale for this change
    
    NewColumnChunkMetaData dereferences column metadata while preparing
    encoding information. A malformed unencrypted ColumnChunk without
    MetaData therefore panics instead of returning its error result.
    Encrypted chunks may legitimately populate plaintext metadata during
    decryption.
    
    ### What changes are included in this PR?
    
    Check for missing metadata after the decryption path and return an error
    for malformed chunks. Add regression coverage while preserving encrypted
    metadata handling.
    
    ### Are these changes tested?
    
    - `go test ./parquet/metadata`
    
    ### Are there any user-facing changes?
    
    Malformed unencrypted column chunks now return an error instead of
    panicking. Valid encrypted column chunks are unchanged.
---
 parquet/metadata/column_chunk.go       | 3 +++
 parquet/metadata/file_internal_test.go | 6 ++++++
 2 files changed, 9 insertions(+)

diff --git a/parquet/metadata/column_chunk.go b/parquet/metadata/column_chunk.go
index 1ccd801b..ca358510 100644
--- a/parquet/metadata/column_chunk.go
+++ b/parquet/metadata/column_chunk.go
@@ -117,6 +117,9 @@ func NewColumnChunkMetaData(column *format.ColumnChunk, 
descr *schema.Column, wr
                        }
                }
        }
+       if c.columnMeta == nil {
+               return nil, errors.New("column chunk metadata is missing")
+       }
        for _, enc := range c.columnMeta.Encodings {
                c.encodings = append(c.encodings, parquet.Encoding(enc))
        }
diff --git a/parquet/metadata/file_internal_test.go 
b/parquet/metadata/file_internal_test.go
index 1b4c2790..b5eca94a 100644
--- a/parquet/metadata/file_internal_test.go
+++ b/parquet/metadata/file_internal_test.go
@@ -36,3 +36,9 @@ func TestNewFileMetaDataReturnsSchemaErrors(t *testing.T) {
        require.Error(t, err)
        require.Nil(t, meta)
 }
+
+func TestNewColumnChunkMetaDataReturnsErrorForMissingMetadata(t *testing.T) {
+       meta, err := NewColumnChunkMetaData(&format.ColumnChunk{}, nil, nil, 0, 
0, nil)
+       require.EqualError(t, err, "column chunk metadata is missing")
+       require.Nil(t, meta)
+}

Reply via email to