Normalize fgets() calls to use sizeof() for calculating the buffer size

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.
This commit is contained in:
Peter Eisentraut 2007-02-08 11:10:27 +00:00
parent b79575ce45
commit 086c189456
10 changed files with 38 additions and 41 deletions

View 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';

View 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);

View 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;

View 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';
}

View 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)

View 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;

View 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;
}

View 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)

View 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);

View 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;