Make libpq reject non-numeric and out-of-range port numbers with a suitable
authorTom Lane
Sun, 27 Sep 2009 03:43:10 +0000 (03:43 +0000)
committerTom Lane
Sun, 27 Sep 2009 03:43:10 +0000 (03:43 +0000)
error message, rather than blundering on and failing with something opaque.

Sam Mason

src/interfaces/libpq/fe-connect.c

index 41c753a4f8cdb172fb0a17265ab559d098639adb..1be948505e5bce0159c7aa95d38f1336fd8aa4f0 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.376 2009/07/24 17:58:31 tgl Exp $
+ *   $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.377 2009/09/27 03:43:10 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -817,7 +817,16 @@ connectDBStart(PGconn *conn)
 
    /* Set up port number as a string */
    if (conn->pgport != NULL && conn->pgport[0] != '\0')
+   {
        portnum = atoi(conn->pgport);
+       if (portnum < 1 || portnum > 65535)
+       {
+           appendPQExpBuffer(&conn->errorMessage,
+                             libpq_gettext("invalid port number: \"%s\"\n"),
+                             conn->pgport);
+           goto connect_errReturn;
+       }
+   }
    else
        portnum = DEF_PGPORT;
    snprintf(portstr, sizeof(portstr), "%d", portnum);