From 3184183a19d23a41f0711a58377b9135a9265e9b Mon Sep 17 00:00:00 2001 From: Aleksander Alekseev 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