From d005b07a50853812d6cb1f1cbd877c0153235bc0 Mon Sep 17 00:00:00 2001 From: Aleksander Alekseev Date: Mon, 24 Jul 2023 18:17:58 +0300 Subject: [PATCH v1] Check more invariants during syscache initialization Prior to this commit InitCatalogCache() had only one Assert for cacheinfo[] that checks .reloid. Add sanity checks for the rest of the fields. Aleksander Alekseev, reviewed by TODO FIXME Discussion: TODO FIXME --- src/backend/utils/cache/catcache.c | 3 +++ src/backend/utils/cache/syscache.c | 5 ++++- 2 files changed, 7 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..4883f36a67 100644 --- a/src/backend/utils/cache/syscache.c +++ b/src/backend/utils/cache/syscache.c @@ -720,7 +720,10 @@ InitCatalogCache(void) * Assert that every enumeration value defined in syscache.h has been * populated in the cacheinfo array. */ - Assert(cacheinfo[cacheId].reloid != 0); + Assert(cacheinfo[cacheId].reloid != InvalidOid); + Assert(cacheinfo[cacheId].indoid != InvalidOid); + Assert((cacheinfo[cacheId].nkeys > 0) && (cacheinfo[cacheId].nkeys <= 4)); + /* .nbuckets and .key[] are checked by InitCatCache() */ SysCache[cacheId] = InitCatCache(cacheId, cacheinfo[cacheId].reloid, -- 2.41.0