From f675cd6b8d7ef91a8fbc6e1099ed015445e8eaf5 Mon Sep 17 00:00:00 2001 From: Minh Vu Date: Sat, 25 Jul 2026 01:28:21 +0200 Subject: [PATCH 1/2] fix(parquet/compress): allocate uncompressed codec output --- parquet/compress/compress.go | 11 +++-------- parquet/compress/compress_test.go | 12 ++++++++++++ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/parquet/compress/compress.go b/parquet/compress/compress.go index 4743c9867..2887aaa21 100644 --- a/parquet/compress/compress.go +++ b/parquet/compress/compress.go @@ -165,10 +165,7 @@ func (nocodec) NewReader(r io.Reader) io.ReadCloser { } func (nocodec) Decode(dst, src []byte) []byte { - if dst != nil { - copy(dst, src) - } - return dst + return append(dst[:0], src...) } func (n nocodec) DecodeWithError(dst, src []byte) ([]byte, error) { @@ -184,13 +181,11 @@ func (writerNopCloser) Close() error { } func (nocodec) Encode(dst, src []byte) []byte { - copy(dst, src) - return dst + return append(dst[:0], src...) } func (nocodec) EncodeLevel(dst, src []byte, _ int) []byte { - copy(dst, src) - return dst + return append(dst[:0], src...) } func (nocodec) NewWriter(w io.Writer) io.WriteCloser { diff --git a/parquet/compress/compress_test.go b/parquet/compress/compress_test.go index eedf0f5f0..028f37c4f 100644 --- a/parquet/compress/compress_test.go +++ b/parquet/compress/compress_test.go @@ -120,6 +120,18 @@ func TestCompressDataOneShot(t *testing.T) { } } +func TestUncompressedCodecAllocatesDestination(t *testing.T) { + codec, err := compress.GetCodec(compress.Codecs.Uncompressed) + assert.NoError(t, err) + src := []byte("arrow") + + assert.Equal(t, src, codec.Encode(nil, src)) + assert.Equal(t, src, codec.Encode(make([]byte, 1), src)) + assert.Equal(t, src, codec.EncodeLevel(nil, src, 0)) + assert.Equal(t, src, codec.Decode(nil, src)) + assert.Equal(t, src, codec.Decode(make([]byte, 1), src)) +} + func TestGzipCompressBound(t *testing.T) { codec, err := compress.GetCodec(compress.Codecs.Gzip) assert.NoError(t, err) From 666067307778d6ad0842fd10fd55bf6e518760a5 Mon Sep 17 00:00:00 2001 From: Minh Vu Date: Sat, 25 Jul 2026 16:59:19 +0200 Subject: [PATCH 2/2] test(parquet/compress): cover undersized EncodeLevel dst --- parquet/compress/compress_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/parquet/compress/compress_test.go b/parquet/compress/compress_test.go index 028f37c4f..2fe4fd3ea 100644 --- a/parquet/compress/compress_test.go +++ b/parquet/compress/compress_test.go @@ -128,6 +128,7 @@ func TestUncompressedCodecAllocatesDestination(t *testing.T) { assert.Equal(t, src, codec.Encode(nil, src)) assert.Equal(t, src, codec.Encode(make([]byte, 1), src)) assert.Equal(t, src, codec.EncodeLevel(nil, src, 0)) + assert.Equal(t, src, codec.EncodeLevel(make([]byte, 1), src, 0)) assert.Equal(t, src, codec.Decode(nil, src)) assert.Equal(t, src, codec.Decode(make([]byte, 1), src)) }