From 001567640ea3d69253c77d9b6a65d6001c4d91b1 Mon Sep 17 00:00:00 2001 From: Jiquan Long Date: Tue, 1 Mar 2022 15:13:54 +0800 Subject: [PATCH] Fix shallow copy of typeutil.AppendFieldData (#15790) Signed-off-by: dragondriver --- internal/util/typeutil/schema.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/internal/util/typeutil/schema.go b/internal/util/typeutil/schema.go index 077a9b9292..4f1537c5dc 100644 --- a/internal/util/typeutil/schema.go +++ b/internal/util/typeutil/schema.go @@ -275,20 +275,24 @@ func AppendFieldData(dst []*schemapb.FieldData, src []*schemapb.FieldData, idx i switch srcVector := fieldType.Vectors.Data.(type) { case *schemapb.VectorField_BinaryVector: if dstVector.GetBinaryVector() == nil { + srcToCopy := srcVector.BinaryVector[idx*(dim/8) : (idx+1)*(dim/8)] dstVector.Data = &schemapb.VectorField_BinaryVector{ - BinaryVector: srcVector.BinaryVector[idx*(dim/8) : (idx+1)*(dim/8)], + BinaryVector: make([]byte, len(srcToCopy)), } + copy(dstVector.Data.(*schemapb.VectorField_BinaryVector).BinaryVector, srcToCopy) } else { dstBinaryVector := dstVector.Data.(*schemapb.VectorField_BinaryVector) dstBinaryVector.BinaryVector = append(dstBinaryVector.BinaryVector, srcVector.BinaryVector[idx*(dim/8):(idx+1)*(dim/8)]...) } case *schemapb.VectorField_FloatVector: if dstVector.GetFloatVector() == nil { + srcToCopy := srcVector.FloatVector.Data[idx*dim : (idx+1)*dim] dstVector.Data = &schemapb.VectorField_FloatVector{ FloatVector: &schemapb.FloatArray{ - Data: srcVector.FloatVector.Data[idx*dim : (idx+1)*dim], + Data: make([]float32, len(srcToCopy)), }, } + copy(dstVector.Data.(*schemapb.VectorField_FloatVector).FloatVector.Data, srcToCopy) } else { dstVector.GetFloatVector().Data = append(dstVector.GetFloatVector().Data, srcVector.FloatVector.Data[idx*dim:(idx+1)*dim]...) }