]> granicus.if.org Git - postgresql/commitdiff
Remove use of sscanf in pg_upgrade, and add C comment to pg_dump
authorBruce Momjian <bruce@momjian.us>
Sat, 15 Feb 2014 16:50:56 +0000 (11:50 -0500)
committerBruce Momjian <bruce@momjian.us>
Sat, 15 Feb 2014 16:50:56 +0000 (11:50 -0500)
Per report from Jackie Chang

contrib/pg_upgrade/option.c
src/bin/pg_dump/pg_backup_directory.c

index 79b59ee17d25f7a3fd2d77b19d1d8374f681e036..4c08e94ffd02abb7e7597bc05ce11f7e9eb22f37 100644 (file)
@@ -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);
index 71b96bd9180660478fd09362416d5d30c2a87e5e..1bed8a9fea5ad92927642c9b73aba6d6bd31e7c3 100644 (file)
@@ -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);