1
0
mirror of https://github.com/postgres/postgres.git synced 2025-12-10 14:22:35 +03:00

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

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