diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index d36272ab4f..bfb500aa54 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -8742,9 +8742,9 @@ do_pg_backup_start(const char *backupidstr, bool fast, List **tablespaces, ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("backup label too long (max %d bytes)", - MAXPGPATH))); + MAXPGPATH - 1))); - memcpy(state->name, backupidstr, strlen(backupidstr)); + (void) strlcpy(state->name, backupidstr, MAXPGPATH)) /* * Mark backup active in shared memory. We must do full-page WAL writes diff --git a/src/include/access/xlogbackup.h b/src/include/access/xlogbackup.h index c30d4a5991..a52345850e 100644 --- a/src/include/access/xlogbackup.h +++ b/src/include/access/xlogbackup.h @@ -21,8 +21,7 @@ typedef struct BackupState { /* Fields saved at backup start */ - /* Backup label name one extra byte for null-termination */ - char name[MAXPGPATH + 1]; + char name[MAXPGPATH];/* backup label name */ XLogRecPtr startpoint; /* backup start WAL location */ TimeLineID starttli; /* backup start TLI */ XLogRecPtr checkpointloc; /* last checkpoint location */