From ec3a1af0a89a169c100f7157f7c6932234ae5988 Mon Sep 17 00:00:00 2001
From: Neil Conway <neilc@samurai.com>
Date: Tue, 21 Jun 2005 01:20:09 +0000
Subject: [PATCH] Fix a potential backend crash during authentication when
 parsing a malformed ident map file.  This was introduced by the linked list
 rewrite in 8.0 -- mea maxima culpa.

Per Coverity static analysis performed by EnterpriseDB.
---
 src/backend/libpq/hba.c | 25 +++++++++----------------
 1 file changed, 9 insertions(+), 16 deletions(-)

diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index 658b42bbfac..bd9b84cffea 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -10,7 +10,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.140 2005/02/26 18:43:33 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.141 2005/06/21 01:20:09 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1135,16 +1135,16 @@ parse_ident_usermap(List *line, int line_number, const char *usermap_name,
 	token = lfirst(line_item);
 	file_map = token;
 
-	/* Get the ident user token (must be provided) */
+	/* Get the ident user token */
 	line_item = lnext(line_item);
-	if (!line)
+	if (!line_item)
 		goto ident_syntax;
 	token = lfirst(line_item);
 	file_ident_user = token;
 
 	/* Get the PG username token */
 	line_item = lnext(line_item);
-	if (!line)
+	if (!line_item)
 		goto ident_syntax;
 	token = lfirst(line_item);
 	file_pguser = token;
@@ -1154,21 +1154,14 @@ parse_ident_usermap(List *line, int line_number, const char *usermap_name,
 		strcmp(file_pguser, pg_user) == 0 &&
 		strcmp(file_ident_user, ident_user) == 0)
 		*found_p = true;
+
 	return;
 
 ident_syntax:
-	if (line_item)
-		ereport(LOG,
-				(errcode(ERRCODE_CONFIG_FILE_ERROR),
-				 errmsg("invalid entry in file \"%s\" at line %d, token \"%s\"",
-						IdentFileName, line_number,
-						(const char *) lfirst(line_item))));
-	else
-		ereport(LOG,
-				(errcode(ERRCODE_CONFIG_FILE_ERROR),
-		  errmsg("missing entry in file \"%s\" at end of line %d",
-				 IdentFileName, line_number)));
-
+	ereport(LOG,
+			(errcode(ERRCODE_CONFIG_FILE_ERROR),
+			 errmsg("missing entry in file \"%s\" at end of line %d",
+					IdentFileName, line_number)));
 	*error_p = true;
 }
 
-- 
GitLab