What's Changed
Security hardening (#280)
This release hardens DiskANN against type confusion and malformed vector datums. Previously, the operator-class SQL referenced pgvector's vector type and operators unqualified, so a type pre-created in the extension's target schema could capture the binding, and the native code trusted the typmod, the persisted metapage dimensions, and the datum layout without validation. Together these could let attacker-controlled bytes reach native DiskANN code paths and cause a backend crash, memory disclosure, or out-of-bounds write.
- Operator classes now bind explicitly to pgvector's extension schema, with quoted, schema-qualified type and operator references, and the extension script
search_pathis preserved. - Vector type, signed typmod, persisted metapage dimensions, and detoasted datum size and dimension are validated before any slice is constructed.
amvalidateis implemented for the vector DiskANN operator classes.- Direct upgrade scripts to 0.9.1 are shipped from every prior release.
Upgrading: run ALTER EXTENSION vectorscale UPDATE TO '0.9.1'. The upgrade verifies that existing vector operator classes are bound to pgvector's type and operators and aborts if one is not. If that happens, drop the affected operator class and recreate the extension objects.
Behavior changes to be aware of:
- Columns without a valid
vector(N)typmod can no longer be indexed with DiskANN. - Pre-existing indexes whose persisted dimensions are invalid (for example, built by an older version on a column without a
vector(N)typmod) now raise an actionable error on scan, insert, and vacuum. These indexes were silently reading out of bounds before. They must be dropped and recreated;REINDEXcannot repair them.
Other changes
- Qualify
pg_catalogschema references in extension SQL (#271) - Bump
lruto 0.16.3 to clear GHSA-rhfx-m35p-ff5j (the affectedIterMutpath was not used by pgvectorscale) - Fix upgrade-test version guards so the upgrade tests run on PG17 and PG18
- Update name to Tiger Data and copyright year (#262)
Full Changelog: 0.9.0...0.9.1