Hello hackers, The DefineCustomStringVariable function(or any other DefineCustomXXXVariable) has a short_desc parameter that can be NULL and it's not apparent that this will lead to a segfault when SHOW ALL is used. This happens because the ShowAllGUCConfig function expects a non-NULL short_desc.
This happened for the Supabase supautils extension( https://github.com/supabase/supautils/issues/24) and any other extension that uses the DefineCustomXXXVariable has the same bug risk. This patch does an Assert on the short_desc(also on the name as an extra measure), so a postgres built with --enable-cassert can prevent the above issue. --- Steve Chavez Engineering at https://supabase.com/
From ad8a61125a0fe33853d459f12e521dff771130d4 Mon Sep 17 00:00:00 2001 From: Steve Chavez <st...@supabase.io> Date: Thu, 19 May 2022 08:59:46 -0500 Subject: [PATCH] Assert name/short_desc to prevent SHOWALL segfault Every DefineCustomXXXVariable function can have a NULL short_desc, and it's not apparent that this will lead to a segfault when SHOW ALL is used. This happens because ShowAllGUCConfig expects a non-NULL short_desc. Assertions are added to init_custom_variable to ensure name and short_desc are present at minimum. --- src/backend/utils/misc/guc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 8e9b71375c..635d39b7d4 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -9239,6 +9239,10 @@ init_custom_variable(const char *name, { struct config_generic *gen; + /* Ensure at least the name and short description are present */ + Assert(name != NULL); + Assert(short_desc != NULL); + /* * Only allow custom PGC_POSTMASTER variables to be created during shared * library preload; any later than that, we can't ensure that the value -- 2.32.0