pgvector.git / summary / log / commit / refs
commit 5ffa6d022b211c89bb69bfd1d91cafbfeac8345a
Author: Andrew Kane <andrew@ankane.org>
Date: Tue Jul 28 21:01:57 2026 +0000
Fixed buffer size for empty sparsevec with max dimensions (no impact to users due to Postgres allocation alignment) [skip ci]
Co-authored-by: 0xJi3F
src/sparsevec.c | 4 ++--
test/expected/sparsevec.out | 6 ++++++
test/sql/sparsevec.sql | 1 +
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/sparsevec.c b/src/sparsevec.c
index ef4796fc..b0756eca 100644
--- a/src/sparsevec.c
+++ b/src/sparsevec.c
@@ -438,13 +438,13 @@ sparsevec_out(PG_FUNCTION_ARGS)
* nnz * (FLOAT_SHORTEST_DECIMAL_LEN - 1) bytes for
* float_to_shortest_decimal_bufn
*
- * nnz - 1 bytes for ,
+ * max(nnz - 1, 0) bytes for ,
*
* 10 bytes for dimensions
*
* 4 bytes for {, }, /, and \0
*/
- buf = (char *) palloc((11 + FLOAT_SHORTEST_DECIMAL_LEN) * sparsevec->nnz + 13);
+ buf = (char *) palloc((11 + FLOAT_SHORTEST_DECIMAL_LEN) * sparsevec->nnz + 14);
ptr = buf;
AppendChar(ptr, '{');
diff --git a/test/expected/sparsevec.out b/test/expected/sparsevec.out
index 989ec82b..ee20a970 100644
--- a/test/expected/sparsevec.out
+++ b/test/expected/sparsevec.out
@@ -187,6 +187,12 @@ SELECT '{}/-1'::sparsevec;
ERROR: sparsevec must have at least 1 dimension
LINE 1: SELECT '{}/-1'::sparsevec;
^
+SELECT '{}/1000000000'::sparsevec;
+ sparsevec
+---------------
+ {}/1000000000
+(1 row)
+
SELECT '{}/1000000001'::sparsevec;
ERROR: sparsevec cannot have more than 1000000000 dimensions
LINE 1: SELECT '{}/1000000001'::sparsevec;
diff --git a/test/sql/sparsevec.sql b/test/sql/sparsevec.sql
index 2e1136b8..d6987d40 100644
--- a/test/sql/sparsevec.sql
+++ b/test/sql/sparsevec.sql
@@ -38,6 +38,7 @@ SELECT '{1:1,1:1}/2'::sparsevec;
SELECT '{1:1,2:1,1:1}/2'::sparsevec;
SELECT '{}/5'::sparsevec;
SELECT '{}/-1'::sparsevec;
+SELECT '{}/1000000000'::sparsevec;
SELECT '{}/1000000001'::sparsevec;
SELECT '{}/2147483648'::sparsevec;
SELECT '{}/-2147483649'::sparsevec;
[parent: 751f5a21d8fd]