aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-09-23 16:53:47 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2010-09-23 16:53:47 -0400
commit1ea2c83807f703157a503b21187594fea28b5087 (patch)
treed6efb124b3e0f5b071d0783142d2c15ca05955b7
parent4c73b3d5bcd309e444be1eb7d974fd6d03be2797 (diff)
downloadpostgresql-1ea2c83807f703157a503b21187594fea28b5087.tar.gz
postgresql-1ea2c83807f703157a503b21187594fea28b5087.zip
Prevent show_session_authorization from crashing when session_authorization
hasn't been set. The only known case where this can happen is when show_session_authorization is invoked in an autovacuum process, which is possible if an index function calls it, as for example in bug #5669 from Andrew Geery. We could perhaps try to return a sensible value, such as the name of the cluster-owning superuser; but that seems like much more trouble than the case is worth, and in any case it could create new possible failure modes. Simply returning an empty string seems like the most appropriate fix. Back-patch to all supported versions, even those before autovacuum, just in case there's another way to provoke this crash.
-rw-r--r--src/backend/commands/variable.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index 549725db705..4adf7dc126a 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -713,6 +713,10 @@ show_session_authorization(void)
AclId savedsysid;
char *endptr;
+ /* If session_authorization hasn't been set in this process, return "" */
+ if (value == NULL || value[0] == '\0')
+ return "";
+
Assert(strspn(value, "x") == NAMEDATALEN &&
(value[NAMEDATALEN] == 'T' || value[NAMEDATALEN] == 'F'));