]> granicus.if.org Git - postgresql/commitdiff
Normalize fgets() calls to use sizeof() for calculating the buffer size
authorPeter Eisentraut <peter_e@gmx.net>
Thu, 8 Feb 2007 11:10:27 +0000 (11:10 +0000)
committerPeter Eisentraut <peter_e@gmx.net>
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 (root@candle.pha.pa.us)
 **
-** $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;