From f6a84546b1a0ae43c00a7f351bc45fbde342466a Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Thu, 27 Jul 2023 10:55:16 +0900 Subject: [PATCH] Add sanity asserts for index OID and attnums during cache init MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There was already a check on the relation OID, but not its index OID and the attributes that can be used during the syscache lookups. The two assertions added by this commit are cheap, and actually useful for developers to fasten the detection of incorrect data in a new entry added in the syscache list, as these assertions are triggered during the initial cache loading (initdb, or just backend startup), not requiring a syscache that uses the new entry. While on it, the relation OID check is switched to use OidIsValid(). Author: Aleksander Alekseev Reviewed-by: Dagfinn Ilmari Mannsåker, Zhang Mingli, Michael Paquier 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..1aacb736c2 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(AttributeNumberIsValid(key[i])); 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,