aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2009-05-03 20:09:54 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2009-05-03 20:09:54 +0000
commit04f2403820344cc27da85d8c0e250933dbecf6b9 (patch)
tree197bac072012956934a4091780f755e847189f4f /src
parentac73ced7255267fb8b1be9dc0b8b369d6b70b306 (diff)
downloadpostgresql-04f2403820344cc27da85d8c0e250933dbecf6b9.tar.gz
postgresql-04f2403820344cc27da85d8c0e250933dbecf6b9.zip
Fix assign_pgstat_temp_directory() to ensure the directory path is
canonicalized. Avoid the need to elog(FATAL) on out-of-memory.
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/misc/guc.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 23fb43647d1..41368bf1e99 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.503 2009/04/23 00:23:45 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.504 2009/05/03 20:09:54 tgl Exp $
*
*--------------------------------------------------------------------
*/
@@ -7618,19 +7618,28 @@ assign_pgstat_temp_directory(const char *newval, bool doit, GucSource source)
{
if (doit)
{
+ char *canon_val = guc_strdup(ERROR, newval);
+ char *tname;
+ char *fname;
+
+ canonicalize_path(canon_val);
+
+ tname = guc_malloc(ERROR, strlen(canon_val) + 12); /* /pgstat.tmp */
+ sprintf(tname, "%s/pgstat.tmp", canon_val);
+ fname = guc_malloc(ERROR, strlen(canon_val) + 13); /* /pgstat.stat */
+ sprintf(fname, "%s/pgstat.stat", canon_val);
+
if (pgstat_stat_tmpname)
free(pgstat_stat_tmpname);
+ pgstat_stat_tmpname = tname;
if (pgstat_stat_filename)
free(pgstat_stat_filename);
+ pgstat_stat_filename = fname;
- pgstat_stat_tmpname = guc_malloc(FATAL, strlen(newval) + 12); /* /pgstat.tmp */
- pgstat_stat_filename = guc_malloc(FATAL, strlen(newval) + 13); /* /pgstat.stat */
-
- sprintf(pgstat_stat_tmpname, "%s/pgstat.tmp", newval);
- sprintf(pgstat_stat_filename, "%s/pgstat.stat", newval);
+ return canon_val;
}
-
- return newval;
+ else
+ return newval;
}
#include "guc-file.c"