Normalize fgets() calls to use sizeof() for calculating the buffer size
authorPeter Eisentraut
Thu, 8 Feb 2007 11:10:27 +0000 (11:10 +0000)
committerPeter Eisentraut
Thu, 8 Feb 2007 11:10:27 +0000 (11:10 +0000)
where possible, and fix some sites that apparently thought that fgets()
will overwrite the buffer by one byte.

Also add some strlcpy() to eliminate some weird memory handling.

contrib/tsearch2/dict_syn.c
contrib/tsearch2/stopword.c
src/backend/access/transam/xlog.c
src/bin/pg_dump/pg_backup_files.c
src/bin/psql/common.c
src/bin/psql/copy.c
src/bin/psql/prompt.c
src/interfaces/libpq/fe-connect.c
src/interfaces/libpq/fe-secure.c
src/tools/entab/entab.c

index 05cb1102502222a93ca794ab1f17bc75a906906d..1e3a71cee12b21632fca64035cc9d69d30f92a3a 100644 (file)
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/tsearch2/dict_syn.c,v 1.11 2006/12/04 09:26:57 teodor Exp $ */
+/* $PostgreSQL: pgsql/contrib/tsearch2/dict_syn.c,v 1.12 2007/02/08 11:10:26 petere Exp $ */
 
 /*
  * ISpell interface
@@ -101,7 +101,7 @@ syn_init(PG_FUNCTION_ARGS)
    }
    memset(d, 0, sizeof(DictSyn));
 
-   while (fgets(buf, SYNBUFLEN, fin))
+   while (fgets(buf, sizeof(buf), fin))
    {
        slen = strlen(buf) - 1;
        buf[slen] = '\0';
index b9b7699594ed53600b992bce7c947419dbc3c861..d8bb54aca31e036f146291acd5f0dc892f6b2ee5 100644 (file)
@@ -45,7 +45,7 @@ readstoplist(text *in, StopList * s)
                     errmsg("could not open file \"%s\": %m",
                            filename)));
 
-       while (fgets(buf, STOPBUFLEN, hin))
+       while (fgets(buf, sizeof(buf), hin))
        {
            buf[strlen(buf) - 1] = '\0';
            pg_verifymbstr(buf, strlen(buf), false);
index b1a5a57b2f474603a248237bc390199207163391..fa6731a386975fd02dcbab971a3af46f88357a70 100644 (file)
@@ -7,7 +7,7 @@
  * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
  * Portions Copyright (c) 1994, Regents of the University of California
  *
- * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.262 2007/02/07 16:44:47 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.263 2007/02/08 11:10:27 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3374,7 +3374,7 @@ readTimeLineHistory(TimeLineID targetTLI)
    /*
     * Parse the file...
     */
-   while (fgets(fline, MAXPGPATH, fd) != NULL)
+   while (fgets(fline, sizeof(fline), fd) != NULL)
    {
        /* skip leading whitespace and check for # comment */
        char       *ptr;
@@ -4248,7 +4248,7 @@ readRecoveryCommandFile(void)
    /*
     * Parse the file...
     */
-   while (fgets(cmdline, MAXPGPATH, fd) != NULL)
+   while (fgets(cmdline, sizeof(cmdline), fd) != NULL)
    {
        /* skip leading whitespace and check for # comment */
        char       *ptr;
index 8216d979d8172d7f393cc233a52c026b07e63855..72eedac2e43ca6126ef14955db5f7d5223e6f871 100644 (file)
@@ -20,7 +20,7 @@
  *
  *
  * IDENTIFICATION
- *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_files.c,v 1.29 2006/07/14 14:52:26 momjian Exp $
+ *     $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_files.c,v 1.30 2007/02/08 11:10:27 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -321,26 +321,25 @@ _getBlobTocEntry(ArchiveHandle *AH, Oid *oid, char fname[K_STD_BUF_SIZE])
 {
    lclContext *ctx = (lclContext *) AH->formatData;
    char        blobTe[K_STD_BUF_SIZE];
-   size_t      fpos;
-   size_t      eos;
 
-   if (fgets(&blobTe[0], K_STD_BUF_SIZE - 1, ctx->blobToc) != NULL)
+   if (fgets(blobTe, sizeof(blobTe), ctx->blobToc) != NULL)
    {
+       size_t      fpos;
+       size_t      eos;
+
        *oid = atooid(blobTe);
 
        fpos = strcspn(blobTe, " ");
 
-       strncpy(fname, &blobTe[fpos + 1], K_STD_BUF_SIZE - 1);
+       strlcpy(fname, &blobTe[fpos + 1], K_STD_BUF_SIZE);
 
        eos = strlen(fname) - 1;
 
        if (fname[eos] == '\n')
            fname[eos] = '\0';
-
    }
    else
    {
-
        *oid = 0;
        fname[0] = '\0';
    }
index 024cf1cd9cbc74231e099eaf01af52b08d5a9d44..d05c241c698922177c38f3368b1a9f8a126a77ee 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/common.c,v 1.132 2007/01/05 22:19:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/common.c,v 1.133 2007/02/08 11:10:27 petere Exp $
  */
 #include "postgres_fe.h"
 #include "common.h"
@@ -1497,7 +1497,7 @@ expand_tilde(char **filename)
        if (*(fn + 1) == '\0')
            get_home_path(home);    /* ~ or ~/ only */
        else if ((pw = getpwnam(fn + 1)) != NULL)
-           StrNCpy(home, pw->pw_dir, MAXPGPATH);       /* ~user */
+           strlcpy(home, pw->pw_dir, sizeof(home));        /* ~user */
 
        *p = oldp;
        if (strlen(home) != 0)
index e655f46c349a3d00a89809a565150d70e9a1926f..eb205ecbc279e5f711f46f78a244ef48fd2a929a 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.73 2007/02/05 15:22:18 adunstan Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/copy.c,v 1.74 2007/02/08 11:10:27 petere Exp $
  */
 #include "postgres_fe.h"
 #include "copy.h"
@@ -801,7 +801,7 @@ handleCopyIn(PGconn *conn, FILE *copystream, bool isbinary)
                /* enable longjmp while waiting for input */
                sigint_interrupt_enabled = true;
 
-               fgresult = fgets(buf, COPYBUFSIZ, copystream);
+               fgresult = fgets(buf, sizeof(buf), copystream);
 
                sigint_interrupt_enabled = false;
 
index b7628e7a7f92d57fa457f48470468c6175acc6fa..1df630ae6bbf429eaf0ab7c9f3dce5d7f0c6cc7b 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright (c) 2000-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/bin/psql/prompt.c,v 1.49 2007/01/05 22:19:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/prompt.c,v 1.50 2007/02/08 11:10:27 petere Exp $
  */
 #include "postgres_fe.h"
 
@@ -96,10 +96,10 @@ get_prompt(promptStatus_t status)
    destination[0] = '\0';
 
    for (p = prompt_string;
-        *p && strlen(destination) < MAX_PROMPT_SIZE;
+        *p && strlen(destination) < sizeof(destination) - 1;
         p++)
    {
-       memset(buf, 0, MAX_PROMPT_SIZE + 1);
+       memset(buf, 0, sizeof(buf));
        if (esc)
        {
            switch (*p)
@@ -107,7 +107,7 @@ get_prompt(promptStatus_t status)
                    /* Current database */
                case '/':
                    if (pset.db)
-                       strncpy(buf, PQdb(pset.db), MAX_PROMPT_SIZE);
+                       strlcpy(buf, PQdb(pset.db), sizeof(buf));
                    break;
                case '~':
                    if (pset.db)
@@ -116,9 +116,9 @@ get_prompt(promptStatus_t status)
 
                        if (strcmp(PQdb(pset.db), PQuser(pset.db)) == 0 ||
                            ((var = getenv("PGDATABASE")) && strcmp(var, PQdb(pset.db)) == 0))
-                           strcpy(buf, "~");
+                           strlcpy(buf, "~", sizeof(buf));
                        else
-                           strncpy(buf, PQdb(pset.db), MAX_PROMPT_SIZE);
+                           strlcpy(buf, PQdb(pset.db), sizeof(buf));
                    }
                    break;
 
@@ -132,7 +132,7 @@ get_prompt(promptStatus_t status)
                        /* INET socket */
                        if (host && host[0] && !is_absolute_path(host))
                        {
-                           strncpy(buf, host, MAX_PROMPT_SIZE);
+                           strlcpy(buf, host, sizeof(buf));
                            if (*p == 'm')
                                buf[strcspn(buf, ".")] = '\0';
                        }
@@ -143,9 +143,9 @@ get_prompt(promptStatus_t status)
                            if (!host
                                || strcmp(host, DEFAULT_PGSOCKET_DIR) == 0
                                || *p == 'm')
-                               strncpy(buf, "[local]", MAX_PROMPT_SIZE);
+                               strlcpy(buf, "[local]", sizeof(buf));
                            else
-                               snprintf(buf, MAX_PROMPT_SIZE, "[local:%s]", host);
+                               snprintf(buf, sizeof(buf), "[local:%s]", host);
                        }
 #endif
                    }
@@ -153,12 +153,12 @@ get_prompt(promptStatus_t status)
                    /* DB server port number */
                case '>':
                    if (pset.db && PQport(pset.db))
-                       strncpy(buf, PQport(pset.db), MAX_PROMPT_SIZE);
+                       strlcpy(buf, PQport(pset.db), sizeof(buf));
                    break;
                    /* DB server user name */
                case 'n':
                    if (pset.db)
-                       strncpy(buf, session_username(), MAX_PROMPT_SIZE);
+                       strlcpy(buf, session_username(), sizeof(buf));
                    break;
 
                case '0':
@@ -252,7 +252,7 @@ get_prompt(promptStatus_t status)
                        fd = popen(file, "r");
                        if (fd)
                        {
-                           fgets(buf, MAX_PROMPT_SIZE - 1, fd);
+                           fgets(buf, sizeof(buf), fd);
                            pclose(fd);
                        }
                        if (strlen(buf) > 0 && buf[strlen(buf) - 1] == '\n')
@@ -274,7 +274,7 @@ get_prompt(promptStatus_t status)
                        name[nameend] = '\0';
                        val = GetVariable(pset.vars, name);
                        if (val)
-                           strncpy(buf, val, MAX_PROMPT_SIZE);
+                           strlcpy(buf, val, sizeof(buf));
                        free(name);
                        p += nameend + 1;
                        break;
@@ -312,9 +312,8 @@ get_prompt(promptStatus_t status)
        }
 
        if (!esc)
-           strncat(destination, buf, MAX_PROMPT_SIZE - strlen(destination));
+           strlcat(destination, buf, sizeof(destination));
    }
 
-   destination[MAX_PROMPT_SIZE] = '\0';
    return destination;
 }
index cc0c6613c4a22de246ec496bce0684cf13131de3..891bf3f9ac7e9868a45433285f926f6db47acc00 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.341 2007/01/05 22:20:00 momjian Exp $
+ *   $PostgreSQL: pgsql/src/interfaces/libpq/fe-connect.c,v 1.342 2007/02/08 11:10:27 petere Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -2845,11 +2845,11 @@ parseServiceInfo(PQconninfoOption *options, PQExpBuffer errorMessage)
            return 1;
        }
 
-       while ((line = fgets(buf, MAXBUFSIZE - 1, f)) != NULL)
+       while ((line = fgets(buf, sizeof(buf), f)) != NULL)
        {
            linenr++;
 
-           if (strlen(line) >= MAXBUFSIZE - 2)
+           if (strlen(line) >= sizeof(buf) - 1)
            {
                fclose(f);
                printfPQExpBuffer(errorMessage,
@@ -3654,7 +3654,7 @@ PasswordFromFile(char *hostname, char *port, char *dbname, char *username)
                   *ret;
        int         len;
 
-       fgets(buf, LINELEN - 1, fp);
+       fgets(buf, sizeof(buf), fp);
 
        len = strlen(buf);
        if (len == 0)
index a471c0b11fe97049d4176e36c9040f924db498f0..2d387b19d2721ba1d451a7f3bae8f0ebc842f83e 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/interfaces/libpq/fe-secure.c,v 1.91 2007/01/26 17:45:41 neilc Exp $
+ *   $PostgreSQL: pgsql/src/interfaces/libpq/fe-secure.c,v 1.92 2007/02/08 11:10:27 petere Exp $
  *
  * NOTES
  *   [ Most of these notes are wrong/obsolete, but perhaps not all ]
@@ -1018,8 +1018,7 @@ SSLerrmessage(void)
    errreason = ERR_reason_error_string(errcode);
    if (errreason != NULL)
    {
-       strncpy(errbuf, errreason, SSL_ERR_LEN - 1);
-       errbuf[SSL_ERR_LEN - 1] = '\0';
+       strlcpy(errbuf, errreason, SSL_ERR_LEN);
        return errbuf;
    }
    snprintf(errbuf, SSL_ERR_LEN, libpq_gettext("SSL error code %lu"), errcode);
index 62279122f891be058cad34e3dbba1ffb1c311332..7a87e0d5abb59e2400ad6007abad71ec2e7bdf58 100644 (file)
@@ -2,7 +2,7 @@
 **     entab.c         - add tabs to a text file
 **     by Bruce Momjian ([email protected])
 **
-** $PostgreSQL: pgsql/src/tools/entab/entab.c,v 1.17 2007/02/01 19:10:30 momjian Exp $
+** $PostgreSQL: pgsql/src/tools/entab/entab.c,v 1.18 2007/02/08 11:10:27 petere Exp $
 **
 ** version 1.3
 **
@@ -108,7 +108,7 @@ main(int argc, char **argv)
 
        escaped = FALSE;
 
-       while (fgets(in_line, BUFSIZ, in_file) != NULL)
+       while (fgets(in_line, sizeof(in_line), in_file) != NULL)
        {
            col_in_tab = 0;
            prv_spaces = 0;