mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-12 15:46:54 +08:00
Hardened VectorArrayGet and VectorArraySet [skip ci]
This commit is contained in:
@@ -305,6 +305,9 @@ typedef IvfflatScanOpaqueData * IvfflatScanOpaque;
|
|||||||
static inline Pointer
|
static inline Pointer
|
||||||
VectorArrayGet(VectorArray arr, int offset)
|
VectorArrayGet(VectorArray arr, int offset)
|
||||||
{
|
{
|
||||||
|
if (offset >= arr->maxlen)
|
||||||
|
elog(ERROR, "safety check failed");
|
||||||
|
|
||||||
return ((char *) arr->items) + (offset * arr->itemsize);
|
return ((char *) arr->items) + (offset * arr->itemsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,7 +316,7 @@ VectorArraySet(VectorArray arr, int offset, Pointer val)
|
|||||||
{
|
{
|
||||||
Size size = VARSIZE_ANY(val);
|
Size size = VARSIZE_ANY(val);
|
||||||
|
|
||||||
if (size > arr->itemsize)
|
if (offset >= arr->maxlen || size > arr->itemsize)
|
||||||
elog(ERROR, "safety check failed");
|
elog(ERROR, "safety check failed");
|
||||||
|
|
||||||
memcpy(VectorArrayGet(arr, offset), val, size);
|
memcpy(VectorArrayGet(arr, offset), val, size);
|
||||||
|
|||||||
Reference in New Issue
Block a user