From 2bc84b68523f52ff8f14789719bee0178c61df84 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Fri, 6 Jun 2003 16:25:35 +0000
Subject: [PATCH] Add defense in assign_session_authorization() against trying
 to do catalog lookups when not in a transaction.  This prevents bizarre
 failures if someone tries to set a value for session_authorization in
 postgresql.conf.  Per report from Fernando Nasser.

---
 src/backend/commands/variable.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index 77fd47bee97..1b2f8477521 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.77 2003/05/22 17:13:08 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.78 2003/06/06 16:25:35 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -750,6 +750,16 @@ assign_session_authorization(const char *value, bool doit, bool interactive)
 		/* not a saved ID, so look it up */
 		HeapTuple	userTup;
 
+		if (! IsTransactionState())
+		{
+			/*
+			 * Can't do catalog lookups, so fail.  The upshot of this is
+			 * that session_authorization cannot be set in postgresql.conf,
+			 * which seems like a good thing anyway.
+			 */
+			return NULL;
+		}
+
 		userTup = SearchSysCache(SHADOWNAME,
 								 PointerGetDatum(value),
 								 0, 0, 0);
-- 
GitLab