From 3cb282f3e61e002456b0575c0baa92b893ecb8f0 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 29 Jan 2003 01:18:21 +0000
Subject: [PATCH] Guard against array overrun, per report from Yichen Xie. 
 This case can only occur if the constant DEFAULT_CLIENT_AUTHSVC is given a
 bogus value, so it doesn't seem worth back-patching, but I'll fix it in HEAD.

---
 src/interfaces/libpq/fe-auth.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c
index eae0fa5f48f..e5f742e888e 100644
--- a/src/interfaces/libpq/fe-auth.c
+++ b/src/interfaces/libpq/fe-auth.c
@@ -10,7 +10,7 @@
  * exceed INITIAL_EXPBUFFER_SIZE (currently 256 bytes).
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.72 2002/12/03 22:09:20 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-auth.c,v 1.73 2003/01/29 01:18:21 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -686,7 +686,14 @@ MsgType
 fe_getauthsvc(char *PQerrormsg)
 {
 	if (pg_authsvc < 0 || pg_authsvc >= n_authsvcs)
+	{
 		fe_setauthsvc(DEFAULT_CLIENT_AUTHSVC, PQerrormsg);
+		if (pg_authsvc < 0 || pg_authsvc >= n_authsvcs)
+		{
+			/* Can only get here if DEFAULT_CLIENT_AUTHSVC is misdefined */
+			return 0;
+		}
+	}
 	return authsvcs[pg_authsvc].msgtype;
 }
 
@@ -704,6 +711,10 @@ fe_getauthname(char *PQerrormsg)
 
 	authsvc = fe_getauthsvc(PQerrormsg);
 
+	/* this just guards against broken DEFAULT_CLIENT_AUTHSVC, see above */
+	if (authsvc == 0)
+		return NULL;			/* leave original error message in place */
+
 #ifdef KRB4
 	if (authsvc == STARTUP_KRB4_MSG)
 		name = pg_krb4_authname(PQerrormsg);
-- 
GitLab