Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions arrow/array/bufferbuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,10 @@ func (b *multiBufferBuilder) UnsafeAppend(hdr *arrow.ViewHeader, val []byte) {
hdr.SetIndexOffset(int32(idx), int32(offset))

n := copy(buf.Buf()[offset:], val)
debug.Assert(n == len(val), "multibufferbuilder did not append full value")
if n != len(val) {
panic("arrow/array: multibufferbuilder could not append full value")
}
buf.ResizeNoShrink(offset + n)
}

Expand Down
38 changes: 38 additions & 0 deletions arrow/array/bufferbuilder_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package array

import (
"testing"

"github.com/apache/arrow-go/v18/arrow"
"github.com/apache/arrow-go/v18/arrow/memory"
"github.com/stretchr/testify/assert"
)

func TestMultiBufferBuilderUnsafeAppendPanicsOnTruncatedCopy(t *testing.T) {
builder := multiBufferBuilder{mem: memory.NewGoAllocator(), blockSize: 8}
builder.Retain()
defer builder.Release()

builder.Reserve(4)

var hdr arrow.ViewHeader
assert.Panics(t, func() {
builder.UnsafeAppend(&hdr, []byte("abcdefghi"))
})
}