From fc1aeee62c58b0b046431205e7dcde4001f2a29b Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Wed, 3 Apr 2024 21:05:35 -0700 Subject: [PATCH] Added SPARSEVEC_MAX_NNZ --- src/sparsevec.c | 10 ++++++++++ src/sparsevec.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/sparsevec.c b/src/sparsevec.c index 22649cd..6e48f91 100644 --- a/src/sparsevec.c +++ b/src/sparsevec.c @@ -70,6 +70,11 @@ CheckNnz(int nnz, int dim) (errcode(ERRCODE_DATA_EXCEPTION), errmsg("sparsevec must have at least one element"))); + if (nnz > SPARSEVEC_MAX_NNZ) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("sparsevec cannot have more than %d non-zero elements", SPARSEVEC_MAX_NNZ))); + if (nnz > dim) ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), @@ -190,6 +195,11 @@ sparsevec_in(PG_FUNCTION_ARGS) pt++; } + if (maxNnz > SPARSEVEC_MAX_NNZ) + ereport(ERROR, + (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), + errmsg("sparsevec cannot have more than %d non-zero elements", SPARSEVEC_MAX_NNZ))); + indices = palloc(maxNnz * sizeof(int32)); values = palloc(maxNnz * sizeof(float)); diff --git a/src/sparsevec.h b/src/sparsevec.h index 673c5b0..1d79957 100644 --- a/src/sparsevec.h +++ b/src/sparsevec.h @@ -2,6 +2,7 @@ #define SPARSEVEC_H #define SPARSEVEC_MAX_DIM 100000 +#define SPARSEVEC_MAX_NNZ 16000 /* Ensure values are aligned */ #define SPARSEVEC_SIZE(_nnz) (offsetof(SparseVector, indices) + MAXALIGN((_nnz) * sizeof(int32)) + (_nnz * sizeof(float)))