diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2009-05-03 20:09:54 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2009-05-03 20:09:54 +0000 |
commit | 04f2403820344cc27da85d8c0e250933dbecf6b9 (patch) | |
tree | 197bac072012956934a4091780f755e847189f4f /src | |
parent | ac73ced7255267fb8b1be9dc0b8b369d6b70b306 (diff) | |
download | postgresql-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.c | 25 |
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" |