diff options
author | Alexander Korotkov | 2022-12-06 00:29:18 +0000 |
---|---|---|
committer | Alexander Korotkov | 2022-12-06 00:29:18 +0000 |
commit | 941aa6a6268a6a66f6895401aad6b5329111d412 (patch) | |
tree | 35fc725d5924e8636ea48f430ae61353cbf28467 | |
parent | a7885c9bb22de3efcc0ba4e79bbde8a77e8b7036 (diff) |
Check the snapshot argument of index_beginscan and family
Passing a NULL snapshot (InvalidSnapshot) is going to work but only as long
as the index can't find any matching rows. This can be confusing for
the extension authors, so add an explicit check for this argument. The check
is implemented with Assert() in order to avoid overhead in release builds.
Reported-by: Sven Klemm
Discussion: https://postgr.es/m/CAJ7c6TPxitD4vbKyP-mpmC1XwyHdPPqvjLzm%2BVpB88h8LGgneQ%40mail.gmail.com
Author: Aleksander Alekseev
Reviewed-by: Pavel Borisov
-rw-r--r-- | src/backend/access/index/indexam.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/access/index/indexam.c b/src/backend/access/index/indexam.c index fe80b8b0ba..dc303995e5 100644 --- a/src/backend/access/index/indexam.c +++ b/src/backend/access/index/indexam.c @@ -209,6 +209,8 @@ index_beginscan(Relation heapRelation, { IndexScanDesc scan; + Assert(snapshot != InvalidSnapshot); + scan = index_beginscan_internal(indexRelation, nkeys, norderbys, snapshot, NULL, false); /* @@ -237,6 +239,8 @@ index_beginscan_bitmap(Relation indexRelation, { IndexScanDesc scan; + Assert(snapshot != InvalidSnapshot); + scan = index_beginscan_internal(indexRelation, nkeys, 0, snapshot, NULL, false); /* @@ -403,6 +407,8 @@ index_parallelscan_estimate(Relation indexRelation, Snapshot snapshot) { Size nbytes; + Assert(snapshot != InvalidSnapshot); + RELATION_CHECKS; nbytes = offsetof(ParallelIndexScanDescData, ps_snapshot_data); @@ -437,6 +443,8 @@ index_parallelscan_initialize(Relation heapRelation, Relation indexRelation, { Size offset; + Assert(snapshot != InvalidSnapshot); + RELATION_CHECKS; offset = add_size(offsetof(ParallelIndexScanDescData, ps_snapshot_data), |