v3-0001-Check-more-invariants-during-syscache-initializat.patch
application/octet-stream
Filename: v3-0001-Check-more-invariants-during-syscache-initializat.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v3-0001
Subject: Check more invariants during syscache initialization
| File | + | − |
|---|---|---|
| src/backend/utils/cache/catcache.c | 3 | 0 |
| src/backend/utils/cache/syscache.c | 3 | 1 |
From 3184183a19d23a41f0711a58377b9135a9265e9b Mon Sep 17 00:00:00 2001
From: Aleksander Alekseev <aleksander@timescale.com>
Date: Mon, 24 Jul 2023 18:17:58 +0300
Subject: [PATCH v3] Check more invariants during syscache initialization
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Prior to this commit InitCatalogCache() had only one Assert for cacheinfo[]
that checks .reloid. Add sanity checks for other fields.
Aleksander Alekseev, reviewed by Michael Paquier, Dagfinn Ilmari Mannsåker
Discussion: https://postgr.es/m/CAJ7c6TOjUTJ0jxvWY6oJeP2-840OF8ch7qscZQsuVuotXTOS_g@mail.gmail.com
---
src/backend/utils/cache/catcache.c | 3 +++
src/backend/utils/cache/syscache.c | 4 +++-
2 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/backend/utils/cache/catcache.c b/src/backend/utils/cache/catcache.c
index 4510031fe6..ef1aff62c9 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -825,7 +825,10 @@ InitCatCache(int id,
cp->cc_nbuckets = nbuckets;
cp->cc_nkeys = nkeys;
for (i = 0; i < nkeys; ++i)
+ {
+ Assert(key[i] != InvalidAttrNumber);
cp->cc_keyno[i] = key[i];
+ }
/*
* new cache is initialized as far as we can go for now. print some
diff --git a/src/backend/utils/cache/syscache.c b/src/backend/utils/cache/syscache.c
index 4e4a34bde8..8dbda0024f 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -720,7 +720,9 @@ InitCatalogCache(void)
* Assert that every enumeration value defined in syscache.h has been
* populated in the cacheinfo array.
*/
- Assert(cacheinfo[cacheId].reloid != 0);
+ Assert(OidIsValid(cacheinfo[cacheId].reloid));
+ Assert(OidIsValid(cacheinfo[cacheId].indoid));
+ /* .nbuckets and .key[] are checked by InitCatCache() */
SysCache[cacheId] = InitCatCache(cacheId,
cacheinfo[cacheId].reloid,
--
2.41.0