Make GetConfigOption/GetConfigOptionResetString return "" for NULL.
As per the preceding commit, GUC APIs generally expose NULL-valued string variables as empty strings. Extend that policy to GetConfigOption() and GetConfigOptionResetString(), eliminating a crash hazard for unwary callers, as well as a fundamental ambiguity in GetConfigOption()'s API. No back-patch, since this is an API change and conceivably somebody somewhere is depending on this corner case. Xing Guo, Aleksander Alekseev, Tom Lane Discussion: https://postgr.es/m/CACpMh+AyDx5YUpPaAgzVwC1d8zfOL4JoD-uyFDnNSa1z0EsDQQ@mail.gmail.com
This commit is contained in:
parent
7704a1a72e
commit
0bc726d95a
|
@ -4215,8 +4215,7 @@ SetConfigOption(const char *name, const char *value,
|
|||
/*
|
||||
* Fetch the current value of the option `name', as a string.
|
||||
*
|
||||
* If the option doesn't exist, return NULL if missing_ok is true (NOTE that
|
||||
* this cannot be distinguished from a string variable with a NULL value!),
|
||||
* If the option doesn't exist, return NULL if missing_ok is true,
|
||||
* otherwise throw an ereport and don't return.
|
||||
*
|
||||
* If restrict_privileged is true, we also enforce that only superusers and
|
||||
|
@ -4259,7 +4258,8 @@ GetConfigOption(const char *name, bool missing_ok, bool restrict_privileged)
|
|||
return buffer;
|
||||
|
||||
case PGC_STRING:
|
||||
return *((struct config_string *) record)->variable;
|
||||
return *((struct config_string *) record)->variable ?
|
||||
*((struct config_string *) record)->variable : "";
|
||||
|
||||
case PGC_ENUM:
|
||||
return config_enum_lookup_by_value((struct config_enum *) record,
|
||||
|
@ -4306,7 +4306,8 @@ GetConfigOptionResetString(const char *name)
|
|||
return buffer;
|
||||
|
||||
case PGC_STRING:
|
||||
return ((struct config_string *) record)->reset_val;
|
||||
return ((struct config_string *) record)->reset_val ?
|
||||
((struct config_string *) record)->reset_val : "";
|
||||
|
||||
case PGC_ENUM:
|
||||
return config_enum_lookup_by_value((struct config_enum *) record,
|
||||
|
|
Loading…
Reference in New Issue