diff --git a/src/ivfbuild.c b/src/ivfbuild.c index b42372f..edc435a 100644 --- a/src/ivfbuild.c +++ b/src/ivfbuild.c @@ -523,10 +523,13 @@ CreateListPages(Relation index, VectorArray centers, int dimensions, { OffsetNumber offno; + /* Zero memory for each list */ + MemSet(list, 0, listSize); + /* Load list */ list->startPage = InvalidBlockNumber; list->insertPage = InvalidBlockNumber; - memcpy(&list->center, VectorArrayGet(centers, i), centers->itemsize); + memcpy(&list->center, VectorArrayGet(centers, i), VARSIZE_ANY(VectorArrayGet(centers, i))); /* Ensure free space */ if (PageGetFreeSpace(page) < listSize) diff --git a/src/ivfflat.h b/src/ivfflat.h index 3b918cf..bdce324 100644 --- a/src/ivfflat.h +++ b/src/ivfflat.h @@ -273,7 +273,7 @@ typedef IvfflatScanOpaqueData * IvfflatScanOpaque; #define VECTOR_ARRAY_SIZE(_length, _size) (sizeof(VectorArrayData) + (_length) * MAXALIGN(_size)) #define VECTOR_ARRAY_OFFSET(_arr, _offset) ((char*) (_arr)->items + (_offset) * (_arr)->itemsize) #define VectorArrayGet(_arr, _offset) VECTOR_ARRAY_OFFSET(_arr, _offset) -#define VectorArraySet(_arr, _offset, _val) memcpy(VECTOR_ARRAY_OFFSET(_arr, _offset), _val, (_arr)->itemsize) +#define VectorArraySet(_arr, _offset, _val) memcpy(VECTOR_ARRAY_OFFSET(_arr, _offset), _val, VARSIZE_ANY(_val)) /* Methods */ VectorArray VectorArrayInit(int maxlen, int dimensions, Size itemsize);