]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Handle NULL for short descriptions of custom GUC variables
authorMichael Paquier <michael@paquier.xyz>
Sat, 28 May 2022 03:12:58 +0000 (12:12 +0900)
committerMichael Paquier <michael@paquier.xyz>
Sat, 28 May 2022 03:12:58 +0000 (12:12 +0900)
If a short description is specified as NULL in one of the various
DefineCustomXXXVariable() functions available to external modules to
define a custom parameter, SHOW ALL would crash.  This change teaches
SHOW ALL to properly handle NULL short descriptions, as well as any code
paths that manipulate it, to gain in flexibility.  Note that
help_config.c was already able to do that, when describing a set of GUCs
for postgres --describe-config.

Author: Steve Chavez
Reviewed by: Nathan Bossart, Andres Freund, Michael Paquier, Tom Lane
Discussion: https://postgr.es/m/CAGRrpzY6hO-Kmykna_XvsTv8P2DshGiU6G3j8yGao4mk0CqjHA%40mail.gmail.com
Backpatch-through: 10

src/backend/utils/misc/guc.c

index 1ffa1780cbe878b559887c19b1ff928b24814508..ef0f78126039926cd75529a3aa628e0f2050540f 100644 (file)
@@ -8322,7 +8322,16 @@ ShowAllGUCConfig(DestReceiver *dest)
                        isnull[1] = true;
                }
 
-               values[2] = PointerGetDatum(cstring_to_text(conf->short_desc));
+               if (conf->short_desc)
+               {
+                       values[2] = PointerGetDatum(cstring_to_text(conf->short_desc));
+                       isnull[2] = false;
+               }
+               else
+               {
+                       values[2] = PointerGetDatum(NULL);
+                       isnull[2] = true;
+               }
 
                /* send it to dest */
                do_tup_output(tstate, values, isnull);
@@ -8334,7 +8343,8 @@ ShowAllGUCConfig(DestReceiver *dest)
                        pfree(setting);
                        pfree(DatumGetPointer(values[1]));
                }
-               pfree(DatumGetPointer(values[2]));
+               if (conf->short_desc)
+                       pfree(DatumGetPointer(values[2]));
        }
 
        end_tup_output(tstate);