You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ze...@apache.org on 2026/08/11 15:23:39 UTC

(arrow-go) branch main updated: fix(parquet/metadata): return error for missing column metadata (#1137)

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 <vu...@gmail.com>
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)
+}