Fix a potential backend crash during authentication when parsing a
authorNeil Conway
Tue, 21 Jun 2005 01:20:09 +0000 (01:20 +0000)
committerNeil Conway
Tue, 21 Jun 2005 01:20:09 +0000 (01:20 +0000)
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

index 658b42bbfac6bab87f47d030151b558c506b4fcf..bd9b84cffea635eb9043d89131b754477ee42d7c 100644 (file)
@@ -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;
 }