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)
+}