diff --git a/contrib/pg_upgrade/option.c b/contrib/pg_upgrade/option.c index 79b59ee17d25f7a3fd2d77b19d1d8374f681e036..4c08e94ffd02abb7e7597bc05ce11f7e9eb22f37 100644 --- a/contrib/pg_upgrade/option.c +++ b/contrib/pg_upgrade/option.c @@ -453,9 +453,10 @@ get_sock_dir(ClusterInfo *cluster, bool live_check) sscanf(line, "%hu", &old_cluster.port); if (lineno == LOCK_FILE_LINE_SOCKET_DIR) { - cluster->sockdir = pg_malloc(MAXPGPATH); + cluster->sockdir = pg_strdup(line); /* strip off newline */ - sscanf(line, "%s\n", cluster->sockdir); + if (strchr(cluster->sockdir, '\n') != NULL) + *strchr(cluster->sockdir, '\n') = '\0'; } } fclose(fp); diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c index 71b96bd9180660478fd09362416d5d30c2a87e5e..1bed8a9fea5ad92927642c9b73aba6d6bd31e7c3 100644 --- a/src/bin/pg_dump/pg_backup_directory.c +++ b/src/bin/pg_dump/pg_backup_directory.c @@ -452,6 +452,7 @@ _LoadBlobs(ArchiveHandle *AH, RestoreOptions *ropt) char fname[MAXPGPATH]; char path[MAXPGPATH]; + /* Can't overflow because line and fname are the same length. */ if (sscanf(line, "%u %s\n", &oid, fname) != 2) exit_horribly(modulename, "invalid line in large object TOC file \"%s\": \"%s\"\n", fname, line);