On 4/24/18 05:57, Devrim Gündüz wrote:
> While building stable releases and v11 on Fedora 28, I am seeing some 
> warnings.

Attached is a patch to fix these warnings in master.  These are very
similar to the class of warnings we fixed last time around for GCC 7.

GCC 8 is now frozen, so it would be a good time to move ahead with this.

> What is the project's policy about fixing those warnings in older branches? 

We did backpatch the GCC 7 changes.  We could do the same here, but it's
a pretty sizeable number of changes.

-- 
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
From ce6142824b745d83511c73efe88c0e2d0ad0522b Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <pete...@gmx.net>
Date: Mon, 9 Apr 2018 14:54:41 +0000
Subject: [PATCH] Fix new warnings from GCC 8

---
 contrib/pg_standby/pg_standby.c               |  4 +--
 src/backend/access/transam/xlog.c             |  8 ++---
 src/backend/commands/extension.c              | 32 ++++++-------------
 src/backend/postmaster/postmaster.c           |  9 ++++--
 src/backend/storage/file/fd.c                 |  4 +--
 src/backend/storage/file/reinit.c             |  8 ++---
 src/backend/storage/file/sharedfileset.c      | 32 +++++++++----------
 src/backend/tsearch/ts_utils.c                |  7 +---
 src/backend/utils/misc/guc.c                  |  2 +-
 src/backend/utils/misc/tzparser.c             |  2 +-
 src/backend/utils/time/snapmgr.c              |  2 +-
 src/bin/initdb/findtimezone.c                 |  2 +-
 src/bin/initdb/initdb.c                       |  4 +--
 src/bin/pg_basebackup/pg_basebackup.c         |  2 +-
 src/bin/pg_basebackup/receivelog.c            | 18 +++++++----
 src/bin/pg_dump/pg_backup_directory.c         |  4 +--
 .../pg_verify_checksums/pg_verify_checksums.c |  2 +-
 src/bin/pg_waldump/compat.c                   |  4 +--
 src/bin/pgbench/pgbench.c                     |  6 ++--
 src/bin/psql/startup.c                        |  6 ++--
 src/interfaces/ecpg/preproc/ecpg.c            |  4 +--
 src/interfaces/libpq/fe-connect.c             |  8 ++---
 src/interfaces/libpq/fe-secure-openssl.c      |  2 +-
 src/test/regress/pg_regress.c                 | 14 ++++----
 src/timezone/pgtz.c                           |  2 +-
 25 files changed, 89 insertions(+), 99 deletions(-)

diff --git a/contrib/pg_standby/pg_standby.c b/contrib/pg_standby/pg_standby.c
index cb785971a9..fcdf4e6a3f 100644
--- a/contrib/pg_standby/pg_standby.c
+++ b/contrib/pg_standby/pg_standby.c
@@ -60,7 +60,7 @@ char     *nextWALFileName;    /* the file we need to get from 
archive */
 char      *restartWALFileName; /* the file from which we can restart restore */
 char      *priorWALFileName;   /* the file we need to get from archive */
 char           WALFilePath[MAXPGPATH * 2]; /* the file path including archive 
*/
-char           restoreCommand[MAXPGPATH];      /* run this to restore */
+char      *restoreCommand;             /* run this to restore */
 char           exclusiveCleanupFileName[MAXFNAMELEN];  /* the file we need to 
get
                                                                                
                         * from archive */
 
@@ -98,7 +98,7 @@ int                   restoreCommandType;
 int                    nextWALFileType;
 
 #define SET_RESTORE_COMMAND(cmd, arg1, arg2) \
-       snprintf(restoreCommand, MAXPGPATH, cmd " \"%s\" \"%s\"", arg1, arg2)
+       restoreCommand = psprintf(cmd " \"%s\" \"%s\"", arg1, arg2)
 
 struct stat stat_buf;
 
diff --git a/src/backend/access/transam/xlog.c 
b/src/backend/access/transam/xlog.c
index c0923d97f2..d29459e8d7 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -7702,12 +7702,12 @@ StartupXLOG(void)
                        if (!XLogArchiveIsReadyOrDone(origfname))
                        {
                                char            origpath[MAXPGPATH];
-                               char            partialfname[MAXFNAMELEN];
-                               char            partialpath[MAXPGPATH];
+                               char            partialfname[MAXFNAMELEN + 8];
+                               char            partialpath[MAXPGPATH + 8];
 
                                XLogFilePath(origpath, EndOfLogTLI, 
endLogSegNo, wal_segment_size);
-                               snprintf(partialfname, MAXFNAMELEN, 
"%s.partial", origfname);
-                               snprintf(partialpath, MAXPGPATH, "%s.partial", 
origpath);
+                               snprintf(partialfname, sizeof(partialfname), 
"%s.partial", origfname);
+                               snprintf(partialpath, sizeof(partialpath), 
"%s.partial", origpath);
 
                                /*
                                 * Make sure there's no .done or .ready file 
for the .partial
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c
index 2e4538146d..0c6df45335 100644
--- a/src/backend/commands/extension.c
+++ b/src/backend/commands/extension.c
@@ -366,34 +366,24 @@ static char *
 get_extension_control_directory(void)
 {
        char            sharepath[MAXPGPATH];
-       char       *result;
 
        get_share_path(my_exec_path, sharepath);
-       result = (char *) palloc(MAXPGPATH);
-       snprintf(result, MAXPGPATH, "%s/extension", sharepath);
-
-       return result;
+       return psprintf("%s/extension", sharepath);
 }
 
 static char *
 get_extension_control_filename(const char *extname)
 {
        char            sharepath[MAXPGPATH];
-       char       *result;
 
        get_share_path(my_exec_path, sharepath);
-       result = (char *) palloc(MAXPGPATH);
-       snprintf(result, MAXPGPATH, "%s/extension/%s.control",
-                        sharepath, extname);
-
-       return result;
+       return psprintf("%s/extension/%s.control", sharepath, extname);
 }
 
 static char *
 get_extension_script_directory(ExtensionControlFile *control)
 {
        char            sharepath[MAXPGPATH];
-       char       *result;
 
        /*
         * The directory parameter can be omitted, absolute, or relative to the
@@ -406,10 +396,8 @@ get_extension_script_directory(ExtensionControlFile 
*control)
                return pstrdup(control->directory);
 
        get_share_path(my_exec_path, sharepath);
-       result = (char *) palloc(MAXPGPATH);
-       snprintf(result, MAXPGPATH, "%s/%s", sharepath, control->directory);
 
-       return result;
+       return psprintf("%s/%s", sharepath, control->directory);
 }
 
 static char *
@@ -421,9 +409,8 @@ get_extension_aux_control_filename(ExtensionControlFile 
*control,
 
        scriptdir = get_extension_script_directory(control);
 
-       result = (char *) palloc(MAXPGPATH);
-       snprintf(result, MAXPGPATH, "%s/%s--%s.control",
-                        scriptdir, control->name, version);
+       result = psprintf("%s/%s--%s.control",
+                                         scriptdir, control->name, version);
 
        pfree(scriptdir);
 
@@ -439,13 +426,12 @@ get_extension_script_filename(ExtensionControlFile 
*control,
 
        scriptdir = get_extension_script_directory(control);
 
-       result = (char *) palloc(MAXPGPATH);
        if (from_version)
-               snprintf(result, MAXPGPATH, "%s/%s--%s--%s.sql",
-                                scriptdir, control->name, from_version, 
version);
+               result = psprintf("%s/%s--%s--%s.sql",
+                                                 scriptdir, control->name, 
from_version, version);
        else
-               snprintf(result, MAXPGPATH, "%s/%s--%s.sql",
-                                scriptdir, control->name, version);
+               result = psprintf("%s/%s--%s.sql",
+                                                 scriptdir, control->name, 
version);
 
        pfree(scriptdir);
 
diff --git a/src/backend/postmaster/postmaster.c 
b/src/backend/postmaster/postmaster.c
index d948369f3e..5697bf4cbb 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -4110,7 +4110,7 @@ BackendInitialize(Port *port)
        int                     ret;
        char            remote_host[NI_MAXHOST];
        char            remote_port[NI_MAXSERV];
-       char            remote_ps_data[NI_MAXHOST];
+       char       *remote_ps_data;
 
        /* Save port etc. for ps status */
        MyProcPort = port;
@@ -4176,9 +4176,9 @@ BackendInitialize(Port *port)
                                (errmsg_internal("pg_getnameinfo_all() failed: 
%s",
                                                                 
gai_strerror(ret))));
        if (remote_port[0] == '\0')
-               snprintf(remote_ps_data, sizeof(remote_ps_data), "%s", 
remote_host);
+               remote_ps_data = remote_host;
        else
-               snprintf(remote_ps_data, sizeof(remote_ps_data), "%s(%s)", 
remote_host, remote_port);
+               remote_ps_data = psprintf("%s(%s)", remote_host, remote_port);
 
        /*
         * Save remote_host and remote_port in port structure (after this, they
@@ -4268,6 +4268,9 @@ BackendInitialize(Port *port)
                init_ps_display(port->user_name, port->database_name, 
remote_ps_data,
                                                update_process_title ? 
"authentication" : "");
 
+       if (remote_ps_data != remote_host)
+               pfree(remote_ps_data);
+
        /*
         * Disable the timeout, and prevent SIGTERM/SIGQUIT again.
         */
diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c
index f772dfe93f..d343729000 100644
--- a/src/backend/storage/file/fd.c
+++ b/src/backend/storage/file/fd.c
@@ -1571,7 +1571,7 @@ static File
 OpenTemporaryFileInTablespace(Oid tblspcOid, bool rejectError)
 {
        char            tempdirpath[MAXPGPATH];
-       char            tempfilepath[MAXPGPATH];
+       char            tempfilepath[MAXPGPATH + sizeof(PG_TEMP_FILE_PREFIX) + 
3];
        File            file;
 
        TempTablespacePath(tempdirpath, tblspcOid);
@@ -3162,7 +3162,7 @@ RemovePgTempRelationFilesInDbspace(const char 
*dbspacedirname)
 {
        DIR                *dbspace_dir;
        struct dirent *de;
-       char            rm_path[MAXPGPATH * 2];
+       char            rm_path[MAXPGPATH * 2 + 256];
 
        dbspace_dir = AllocateDir(dbspacedirname);
 
diff --git a/src/backend/storage/file/reinit.c 
b/src/backend/storage/file/reinit.c
index 74ff6c359b..ccd9cf71d6 100644
--- a/src/backend/storage/file/reinit.c
+++ b/src/backend/storage/file/reinit.c
@@ -150,7 +150,7 @@ ResetUnloggedRelationsInDbspaceDir(const char 
*dbspacedirname, int op)
 {
        DIR                *dbspace_dir;
        struct dirent *de;
-       char            rm_path[MAXPGPATH * 2];
+       char            rm_path[MAXPGPATH * 2 + 256];
 
        /* Caller must specify at least one operation. */
        Assert((op & (UNLOGGED_RELATION_CLEANUP | UNLOGGED_RELATION_INIT)) != 
0);
@@ -280,8 +280,8 @@ ResetUnloggedRelationsInDbspaceDir(const char 
*dbspacedirname, int op)
                        ForkNumber      forkNum;
                        int                     oidchars;
                        char            oidbuf[OIDCHARS + 1];
-                       char            srcpath[MAXPGPATH * 2];
-                       char            dstpath[MAXPGPATH];
+                       char            srcpath[MAXPGPATH * 2 + 256];
+                       char            dstpath[MAXPGPATH * 2 + 11];
 
                        /* Skip anything that doesn't look like a relation data 
file. */
                        if (!parse_filename_for_nontemp_relation(de->d_name, 
&oidchars,
@@ -323,7 +323,7 @@ ResetUnloggedRelationsInDbspaceDir(const char 
*dbspacedirname, int op)
                        ForkNumber      forkNum;
                        int                     oidchars;
                        char            oidbuf[OIDCHARS + 1];
-                       char            mainpath[MAXPGPATH];
+                       char            mainpath[MAXPGPATH * 2 + 11];
 
                        /* Skip anything that doesn't look like a relation data 
file. */
                        if (!parse_filename_for_nontemp_relation(de->d_name, 
&oidchars,
diff --git a/src/backend/storage/file/sharedfileset.c 
b/src/backend/storage/file/sharedfileset.c
index 0ac8696536..f98dfb98d2 100644
--- a/src/backend/storage/file/sharedfileset.c
+++ b/src/backend/storage/file/sharedfileset.c
@@ -27,8 +27,8 @@
 #include "utils/builtins.h"
 
 static void SharedFileSetOnDetach(dsm_segment *segment, Datum datum);
-static void SharedFileSetPath(char *path, SharedFileSet *fileset, Oid 
tablespace);
-static void SharedFilePath(char *path, SharedFileSet *fileset, const char 
*name);
+static void SharedFileSetPath(char *path, size_t size, SharedFileSet *fileset, 
Oid tablespace);
+static void SharedFilePath(char *path, size_t size, SharedFileSet *fileset, 
const char *name);
 static Oid     ChooseTablespace(const SharedFileSet *fileset, const char 
*name);
 
 /*
@@ -102,21 +102,21 @@ SharedFileSetAttach(SharedFileSet *fileset, dsm_segment 
*seg)
 File
 SharedFileSetCreate(SharedFileSet *fileset, const char *name)
 {
-       char            path[MAXPGPATH];
+       char            path[MAXPGPATH + 101];
        File            file;
 
-       SharedFilePath(path, fileset, name);
+       SharedFilePath(path, sizeof(path), fileset, name);
        file = PathNameCreateTemporaryFile(path, false);
 
        /* If we failed, see if we need to create the directory on demand. */
        if (file <= 0)
        {
                char            tempdirpath[MAXPGPATH];
-               char            filesetpath[MAXPGPATH];
+               char            filesetpath[MAXPGPATH + 100];
                Oid                     tablespace = ChooseTablespace(fileset, 
name);
 
                TempTablespacePath(tempdirpath, tablespace);
-               SharedFileSetPath(filesetpath, fileset, tablespace);
+               SharedFileSetPath(filesetpath, sizeof(filesetpath), fileset, 
tablespace);
                PathNameCreateTemporaryDir(tempdirpath, filesetpath);
                file = PathNameCreateTemporaryFile(path, true);
        }
@@ -134,7 +134,7 @@ SharedFileSetOpen(SharedFileSet *fileset, const char *name)
        char            path[MAXPGPATH];
        File            file;
 
-       SharedFilePath(path, fileset, name);
+       SharedFilePath(path, sizeof(path), fileset, name);
        file = PathNameOpenTemporaryFile(path);
 
        return file;
@@ -150,7 +150,7 @@ SharedFileSetDelete(SharedFileSet *fileset, const char 
*name,
 {
        char            path[MAXPGPATH];
 
-       SharedFilePath(path, fileset, name);
+       SharedFilePath(path, sizeof(path), fileset, name);
 
        return PathNameDeleteTemporaryFile(path, error_on_failure);
 }
@@ -161,7 +161,7 @@ SharedFileSetDelete(SharedFileSet *fileset, const char 
*name,
 void
 SharedFileSetDeleteAll(SharedFileSet *fileset)
 {
-       char            dirpath[MAXPGPATH];
+       char            dirpath[MAXPGPATH + 100];
        int                     i;
 
        /*
@@ -171,7 +171,7 @@ SharedFileSetDeleteAll(SharedFileSet *fileset)
         */
        for (i = 0; i < fileset->ntablespaces; ++i)
        {
-               SharedFileSetPath(dirpath, fileset, fileset->tablespaces[i]);
+               SharedFileSetPath(dirpath, sizeof(dirpath), fileset, 
fileset->tablespaces[i]);
                PathNameDeleteTemporaryDir(dirpath);
        }
 }
@@ -209,12 +209,12 @@ SharedFileSetOnDetach(dsm_segment *segment, Datum datum)
  * in a given tablespace.
  */
 static void
-SharedFileSetPath(char *path, SharedFileSet *fileset, Oid tablespace)
+SharedFileSetPath(char *path, size_t size, SharedFileSet *fileset, Oid 
tablespace)
 {
        char            tempdirpath[MAXPGPATH];
 
        TempTablespacePath(tempdirpath, tablespace);
-       snprintf(path, MAXPGPATH, "%s/%s%d.%u.sharedfileset",
+       snprintf(path, size, "%s/%s%d.%u.sharedfileset",
                         tempdirpath, PG_TEMP_FILE_PREFIX,
                         fileset->creator_pid, fileset->number);
 }
@@ -235,10 +235,10 @@ ChooseTablespace(const SharedFileSet *fileset, const char 
*name)
  * Compute the full path of a file in a SharedFileSet.
  */
 static void
-SharedFilePath(char *path, SharedFileSet *fileset, const char *name)
+SharedFilePath(char *path, size_t size, SharedFileSet *fileset, const char 
*name)
 {
-       char            dirpath[MAXPGPATH];
+       char            dirpath[MAXPGPATH + 100];
 
-       SharedFileSetPath(dirpath, fileset, ChooseTablespace(fileset, name));
-       snprintf(path, MAXPGPATH, "%s/%s", dirpath, name);
+       SharedFileSetPath(dirpath, sizeof(dirpath), fileset, 
ChooseTablespace(fileset, name));
+       snprintf(path, size, "%s/%s", dirpath, name);
 }
diff --git a/src/backend/tsearch/ts_utils.c b/src/backend/tsearch/ts_utils.c
index f6e03aea4f..0855c586d4 100644
--- a/src/backend/tsearch/ts_utils.c
+++ b/src/backend/tsearch/ts_utils.c
@@ -34,7 +34,6 @@ get_tsearch_config_filename(const char *basename,
                                                        const char *extension)
 {
        char            sharepath[MAXPGPATH];
-       char       *result;
 
        /*
         * We limit the basename to contain a-z, 0-9, and underscores.  This may
@@ -52,11 +51,7 @@ get_tsearch_config_filename(const char *basename,
                                                basename)));
 
        get_share_path(my_exec_path, sharepath);
-       result = palloc(MAXPGPATH);
-       snprintf(result, MAXPGPATH, "%s/tsearch_data/%s.%s",
-                        sharepath, basename, extension);
-
-       return result;
+       return psprintf("%s/tsearch_data/%s.%s", sharepath, basename, 
extension);
 }
 
 /*
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 6eae3d62cc..08813815e7 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -7333,7 +7333,7 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt)
        ConfigVariable *tail = NULL;
        volatile int Tmpfd;
        char            AutoConfFileName[MAXPGPATH];
-       char            AutoConfTmpFileName[MAXPGPATH];
+       char            AutoConfTmpFileName[MAXPGPATH + 4];
 
        if (!superuser())
                ereport(ERROR,
diff --git a/src/backend/utils/misc/tzparser.c 
b/src/backend/utils/misc/tzparser.c
index 3d07eb7265..4e5b222050 100644
--- a/src/backend/utils/misc/tzparser.c
+++ b/src/backend/utils/misc/tzparser.c
@@ -277,7 +277,7 @@ ParseTzFile(const char *filename, int depth,
                        tzEntry **base, int *arraysize, int n)
 {
        char            share_path[MAXPGPATH];
-       char            file_path[MAXPGPATH];
+       char            file_path[MAXPGPATH + 15];
        FILE       *tzFile;
        char            tzbuf[1024];
        char       *line;
diff --git a/src/backend/utils/time/snapmgr.c b/src/backend/utils/time/snapmgr.c
index 4b45d3cccd..5508ebe4ba 100644
--- a/src/backend/utils/time/snapmgr.c
+++ b/src/backend/utils/time/snapmgr.c
@@ -1168,7 +1168,7 @@ ExportSnapshot(Snapshot snapshot)
        int                     i;
        MemoryContext oldcxt;
        char            path[MAXPGPATH];
-       char            pathtmp[MAXPGPATH];
+       char            pathtmp[MAXPGPATH + 4];
 
        /*
         * It's tempting to call RequireTransactionBlock here, since it's not 
very
diff --git a/src/bin/initdb/findtimezone.c b/src/bin/initdb/findtimezone.c
index 4c3a91a122..13325c4824 100644
--- a/src/bin/initdb/findtimezone.c
+++ b/src/bin/initdb/findtimezone.c
@@ -309,7 +309,7 @@ score_timezone(const char *tzname, struct tztry *tt)
 static const char *
 identify_system_timezone(void)
 {
-       static char resultbuf[TZ_STRLEN_MAX + 1];
+       static char resultbuf[TZ_STRLEN_MAX * 2 + 8];
        time_t          tnow;
        time_t          t;
        struct tztry tt;
diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index b39115c346..ea3d9f1c63 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -286,7 +286,7 @@ void                initialize_data_directory(void);
 /*
  * macros for running pipes to postgres
  */
-#define PG_CMD_DECL            char cmd[MAXPGPATH]; FILE *cmdfd
+#define PG_CMD_DECL            char cmd[MAXPGPATH * 2]; FILE *cmdfd
 
 #define PG_CMD_OPEN \
 do { \
@@ -974,7 +974,7 @@ test_config_settings(void)
                400, 300, 200, 100, 50
        };
 
-       char            cmd[MAXPGPATH];
+       char            cmd[MAXPGPATH * 2];
        const int       connslen = sizeof(trial_conns) / sizeof(int);
        const int       bufslen = sizeof(trial_bufs) / sizeof(int);
        int                     i,
diff --git a/src/bin/pg_basebackup/pg_basebackup.c 
b/src/bin/pg_basebackup/pg_basebackup.c
index 58f780c069..0eba93166a 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -1344,7 +1344,7 @@ static void
 ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum)
 {
        char            current_path[MAXPGPATH];
-       char            filename[MAXPGPATH];
+       char            filename[MAXPGPATH + 1];
        const char *mapped_tblspc_path;
        pgoff_t         current_len_left = 0;
        int                     current_padding = 0;
diff --git a/src/bin/pg_basebackup/receivelog.c 
b/src/bin/pg_basebackup/receivelog.c
index 1076878630..dde49d5f4c 100644
--- a/src/bin/pg_basebackup/receivelog.c
+++ b/src/bin/pg_basebackup/receivelog.c
@@ -446,8 +446,7 @@ CheckServerVersionForStreaming(PGconn *conn)
 bool
 ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
 {
-       char            query[128];
-       char            slotcmd[128];
+       char       *slotcmd;
        PGresult   *res;
        XLogRecPtr      stoppos;
 
@@ -472,7 +471,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
        if (stream->replication_slot != NULL)
        {
                reportFlushPosition = true;
-               sprintf(slotcmd, "SLOT \"%s\" ", stream->replication_slot);
+               slotcmd = psprintf("SLOT \"%s\" ", stream->replication_slot);
        }
        else
        {
@@ -480,7 +479,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
                        reportFlushPosition = true;
                else
                        reportFlushPosition = false;
-               slotcmd[0] = 0;
+               slotcmd = NULL;
        }
 
        if (stream->sysidentifier != NULL)
@@ -530,6 +529,8 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
 
        while (1)
        {
+               char       *query;
+
                /*
                 * Fetch the timeline history file for this timeline, if we 
don't have
                 * it already. When streaming log to tar, this will always 
return
@@ -538,8 +539,9 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
                 */
                if (!existsTimeLineHistoryFile(stream))
                {
-                       snprintf(query, sizeof(query), "TIMELINE_HISTORY %u", 
stream->timeline);
+                       query = psprintf("TIMELINE_HISTORY %u", 
stream->timeline);
                        res = PQexec(conn, query);
+                       free(query);
                        if (PQresultStatus(res) != PGRES_TUPLES_OK)
                        {
                                /* FIXME: we might send it ok, but get an error 
*/
@@ -576,11 +578,12 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
                        return true;
 
                /* Initiate the replication stream at specified location */
-               snprintf(query, sizeof(query), "START_REPLICATION %s%X/%X 
TIMELINE %u",
-                                slotcmd,
+               query = psprintf("START_REPLICATION %s%X/%X TIMELINE %u",
+                                slotcmd ? slotcmd : "",
                                 (uint32) (stream->startpos >> 32), (uint32) 
stream->startpos,
                                 stream->timeline);
                res = PQexec(conn, query);
+               free(query);
                if (PQresultStatus(res) != PGRES_COPY_BOTH)
                {
                        fprintf(stderr, _("%s: could not send replication 
command \"%s\": %s"),
@@ -694,6 +697,7 @@ ReceiveXlogStream(PGconn *conn, StreamCtl *stream)
        }
 
 error:
+       free(slotcmd);
        if (walfile != NULL && stream->walmethod->close(walfile, 
CLOSE_NO_RENAME) != 0)
                fprintf(stderr, _("%s: could not close file \"%s\": %s\n"),
                                progname, current_walfile_name, 
stream->walmethod->getlasterror());
diff --git a/src/bin/pg_dump/pg_backup_directory.c 
b/src/bin/pg_dump/pg_backup_directory.c
index 4aabb40f59..8a0adb61be 100644
--- a/src/bin/pg_dump/pg_backup_directory.c
+++ b/src/bin/pg_dump/pg_backup_directory.c
@@ -454,7 +454,7 @@ _LoadBlobs(ArchiveHandle *AH)
        while ((cfgets(ctx->blobsTocFH, line, MAXPGPATH)) != NULL)
        {
                char            fname[MAXPGPATH];
-               char            path[MAXPGPATH];
+               char            path[MAXPGPATH + 1];
 
                /* Can't overflow because line and fname are the same length. */
                if (sscanf(line, "%u %s\n", &oid, fname) != 2)
@@ -462,7 +462,7 @@ _LoadBlobs(ArchiveHandle *AH)
                                                  fname, line);
 
                StartRestoreBlob(AH, oid, AH->public.ropt->dropSchema);
-               snprintf(path, MAXPGPATH, "%s/%s", ctx->directory, fname);
+               snprintf(path, sizeof(path), "%s/%s", ctx->directory, fname);
                _PrintFileData(AH, path);
                EndRestoreBlob(AH, oid);
        }
diff --git a/src/bin/pg_verify_checksums/pg_verify_checksums.c 
b/src/bin/pg_verify_checksums/pg_verify_checksums.c
index b065d0bb89..fa41c5e866 100644
--- a/src/bin/pg_verify_checksums/pg_verify_checksums.c
+++ b/src/bin/pg_verify_checksums/pg_verify_checksums.c
@@ -143,7 +143,7 @@ scan_directory(char *basedir, char *subdir)
        }
        while ((de = readdir(dir)) != NULL)
        {
-               char            fn[MAXPGPATH + 1];
+               char            fn[MAXPGPATH + 256];
                struct stat st;
 
                if (skipfile(de->d_name))
diff --git a/src/bin/pg_waldump/compat.c b/src/bin/pg_waldump/compat.c
index 6ff9eb7e77..4c2eb30c5b 100644
--- a/src/bin/pg_waldump/compat.c
+++ b/src/bin/pg_waldump/compat.c
@@ -49,7 +49,7 @@ timestamptz_to_time_t(TimestampTz t)
 const char *
 timestamptz_to_str(TimestampTz dt)
 {
-       static char buf[MAXDATELEN + 1];
+       static char buf[MAXDATELEN + 138];
        char            ts[MAXDATELEN + 1];
        char            zone[MAXDATELEN + 1];
        time_t          result = (time_t) timestamptz_to_time_t(dt);
@@ -58,7 +58,7 @@ timestamptz_to_str(TimestampTz dt)
        strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", ltime);
        strftime(zone, sizeof(zone), "%Z", ltime);
 
-       sprintf(buf, "%s.%06d %s", ts, (int) (dt % USECS_PER_SEC), zone);
+       snprintf(buf, sizeof(buf), "%s.%06d %s", ts, (int) (dt % 
USECS_PER_SEC), zone);
 
        return buf;
 }
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 78b8f1706c..b6c2bec1d6 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -3528,7 +3528,7 @@ initCreateTables(PGconn *con)
        for (i = 0; i < lengthof(DDLs); i++)
        {
                char            opts[256];
-               char            buffer[256];
+               char       *buffer;
                const struct ddlinfo *ddl = &DDLs[i];
                const char *cols;
 
@@ -3550,11 +3550,13 @@ initCreateTables(PGconn *con)
 
                cols = (scale >= SCALE_32BIT_THRESHOLD) ? ddl->bigcols : 
ddl->smcols;
 
-               snprintf(buffer, sizeof(buffer), "create%s table %s(%s)%s",
+               buffer = psprintf("create%s table %s(%s)%s",
                                 unlogged_tables ? " unlogged" : "",
                                 ddl->table, cols, opts);
 
                executeStatement(con, buffer);
+
+               free(buffer);
        }
 }
 
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index be57574cd3..d5402e0ea4 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -719,7 +719,7 @@ static void
 process_psqlrc(char *argv0)
 {
        char            home[MAXPGPATH];
-       char            rc_file[MAXPGPATH];
+       char            rc_file[MAXPGPATH + sizeof(PSQLRC)];
        char            my_exec_path[MAXPGPATH];
        char            etc_path[MAXPGPATH];
        char       *envrc = getenv("PSQLRC");
@@ -732,7 +732,7 @@ process_psqlrc(char *argv0)
 
        get_etc_path(my_exec_path, etc_path);
 
-       snprintf(rc_file, MAXPGPATH, "%s/%s", etc_path, SYSPSQLRC);
+       snprintf(rc_file, sizeof(rc_file), "%s/%s", etc_path, SYSPSQLRC);
        process_psqlrc_file(rc_file);
 
        if (envrc != NULL && strlen(envrc) > 0)
@@ -745,7 +745,7 @@ process_psqlrc(char *argv0)
        }
        else if (get_home_path(home))
        {
-               snprintf(rc_file, MAXPGPATH, "%s/%s", home, PSQLRC);
+               snprintf(rc_file, sizeof(rc_file), "%s/%s", home, PSQLRC);
                process_psqlrc_file(rc_file);
        }
 }
diff --git a/src/interfaces/ecpg/preproc/ecpg.c 
b/src/interfaces/ecpg/preproc/ecpg.c
index 7fdc4ee596..fc39b08fbd 100644
--- a/src/interfaces/ecpg/preproc/ecpg.c
+++ b/src/interfaces/ecpg/preproc/ecpg.c
@@ -201,11 +201,11 @@ main(int argc, char *const argv[])
                                if (pg_strcasecmp(optarg, "INFORMIX") == 0 || 
pg_strcasecmp(optarg, "INFORMIX_SE") == 0)
                                {
                                        char            
pkginclude_path[MAXPGPATH];
-                                       char            
informix_path[MAXPGPATH];
+                                       char            informix_path[MAXPGPATH 
+ 14];
 
                                        compat = (pg_strcasecmp(optarg, 
"INFORMIX") == 0) ? ECPG_COMPAT_INFORMIX : ECPG_COMPAT_INFORMIX_SE;
                                        get_pkginclude_path(my_exec_path, 
pkginclude_path);
-                                       snprintf(informix_path, MAXPGPATH, 
"%s/informix/esql", pkginclude_path);
+                                       snprintf(informix_path, 
sizeof(informix_path), "%s/informix/esql", pkginclude_path);
                                        add_include_path(informix_path);
                                }
                                else if (strncmp(optarg, "ORACLE", 
strlen("ORACLE")) == 0)
diff --git a/src/interfaces/libpq/fe-connect.c 
b/src/interfaces/libpq/fe-connect.c
index a7e969d7c1..cc0522d56a 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -1079,10 +1079,10 @@ connectOptions2(PGconn *conn)
                        {
                                if (conn->pgpassfile)
                                        free(conn->pgpassfile);
-                               conn->pgpassfile = malloc(MAXPGPATH);
+                               conn->pgpassfile = malloc(MAXPGPATH + 
sizeof(PGPASSFILE) + 1);
                                if (!conn->pgpassfile)
                                        goto oom_error;
-                               snprintf(conn->pgpassfile, MAXPGPATH, "%s/%s",
+                               snprintf(conn->pgpassfile, MAXPGPATH + 
sizeof(PGPASSFILE) + 1, "%s/%s",
                                                 homedir, PGPASSFILE);
                        }
                }
@@ -4491,7 +4491,7 @@ static int
 parseServiceInfo(PQconninfoOption *options, PQExpBuffer errorMessage)
 {
        const char *service = conninfo_getval(options, "service");
-       char            serviceFile[MAXPGPATH];
+       char            serviceFile[MAXPGPATH + 17];
        char       *env;
        bool            group_found = false;
        int                     status;
@@ -4521,7 +4521,7 @@ parseServiceInfo(PQconninfoOption *options, PQExpBuffer 
errorMessage)
 
                if (!pqGetHomeDirectory(homedir, sizeof(homedir)))
                        goto next_file;
-               snprintf(serviceFile, MAXPGPATH, "%s/%s", homedir, 
".pg_service.conf");
+               snprintf(serviceFile, sizeof(serviceFile), "%s/%s", homedir, 
".pg_service.conf");
                if (stat(serviceFile, &stat_buf) != 0)
                        goto next_file;
        }
diff --git a/src/interfaces/libpq/fe-secure-openssl.c 
b/src/interfaces/libpq/fe-secure-openssl.c
index 43640e3799..520d5faf74 100644
--- a/src/interfaces/libpq/fe-secure-openssl.c
+++ b/src/interfaces/libpq/fe-secure-openssl.c
@@ -803,7 +803,7 @@ initialize_SSL(PGconn *conn)
        SSL_CTX    *SSL_context;
        struct stat buf;
        char            homedir[MAXPGPATH];
-       char            fnbuf[MAXPGPATH];
+       char            fnbuf[MAXPGPATH * 2];
        char            sebuf[256];
        bool            have_homedir;
        bool            have_cert;
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 4b24c4ac71..516b1b71b2 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -103,7 +103,7 @@ static const char *sockdir;
 #ifdef HAVE_UNIX_SOCKETS
 static const char *temp_sockdir;
 static char sockself[MAXPGPATH];
-static char socklock[MAXPGPATH];
+static char socklock[MAXPGPATH + 5];
 #endif
 
 static _resultmap *resultmap = NULL;
@@ -463,14 +463,14 @@ static void
 convert_sourcefiles_in(const char *source_subdir, const char *dest_dir, const 
char *dest_subdir, const char *suffix)
 {
        char            testtablespace[MAXPGPATH];
-       char            indir[MAXPGPATH];
+       char            indir[MAXPGPATH + 1];
        struct stat st;
        int                     ret;
        char      **name;
        char      **names;
        int                     count = 0;
 
-       snprintf(indir, MAXPGPATH, "%s/%s", inputdir, source_subdir);
+       snprintf(indir, sizeof(indir), "%s/%s", inputdir, source_subdir);
 
        /* Check that indir actually exists and is a directory */
        ret = stat(indir, &st);
@@ -515,8 +515,8 @@ convert_sourcefiles_in(const char *source_subdir, const 
char *dest_dir, const ch
        /* finally loop on each file and do the replacement */
        for (name = names; *name; name++)
        {
-               char            srcfile[MAXPGPATH];
-               char            destfile[MAXPGPATH];
+               char            srcfile[MAXPGPATH + 2];
+               char            destfile[MAXPGPATH * 2];
                char            prefix[MAXPGPATH];
                FILE       *infile,
                                   *outfile;
@@ -532,8 +532,8 @@ convert_sourcefiles_in(const char *source_subdir, const 
char *dest_dir, const ch
 
                /* build the full actual paths to open */
                snprintf(prefix, strlen(*name) - 6, "%s", *name);
-               snprintf(srcfile, MAXPGPATH, "%s/%s", indir, *name);
-               snprintf(destfile, MAXPGPATH, "%s/%s/%s.%s", dest_dir, 
dest_subdir,
+               snprintf(srcfile, sizeof(srcfile), "%s/%s", indir, *name);
+               snprintf(destfile, sizeof(destfile), "%s/%s/%s.%s", dest_dir, 
dest_subdir,
                                 prefix, suffix);
 
                infile = fopen(srcfile, "r");
diff --git a/src/timezone/pgtz.c b/src/timezone/pgtz.c
index 7a476eabf7..f99a6fb0a2 100644
--- a/src/timezone/pgtz.c
+++ b/src/timezone/pgtz.c
@@ -323,7 +323,7 @@ pg_tzset_offset(long gmtoffset)
 {
        long            absoffset = (gmtoffset < 0) ? -gmtoffset : gmtoffset;
        char            offsetstr[64];
-       char            tzname[128];
+       char            tzname[131];
 
        snprintf(offsetstr, sizeof(offsetstr),
                         "%02ld", absoffset / SECS_PER_HOUR);

base-commit: 76ece169746f50652771a9fa9adc66d207e9d6f7
-- 
2.17.0

Reply via email to