From 2b13c1c78dc7a373538380e923c9027f422f32dc Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 3 May 2009 20:09:54 +0000 Subject: [PATCH] Fix assign_pgstat_temp_directory() to ensure the directory path is canonicalized. Avoid the need to elog(FATAL) on out-of-memory. --- src/backend/utils/misc/guc.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index e343453d41..4f067251e7 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -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" -- 2.39.5