diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index 640899b..c67fc90 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -123,6 +123,7 @@ ProcessConfigFile(GucContext context)
 	char		ConfigAutoFileName[MAXPGPATH];
 	char		*ErrorConfFile;
 	char		*CallingFileName;
+	char		*ErrorConfFile_save = NULL;
 
 	/*
 	 * Config files are processed on startup (by the postmaster only)
@@ -368,6 +369,11 @@ ProcessConfigFile(GucContext context)
 	PgReloadTime = GetCurrentTimestamp();
 
  cleanup_list:
+	/*
+	 * must dup, as in some cases ErrorConfFile points to one of the items
+	 * which will get freed before ErrorConfFile is used.
+	 */
+	ErrorConfFile_save = pstrdup(ErrorConfFile);
 	FreeConfigVariables(head);
 
 	if (error)
@@ -377,18 +383,20 @@ ProcessConfigFile(GucContext context)
 			ereport(ERROR,
 					(errcode(ERRCODE_CONFIG_FILE_ERROR),
 					 errmsg("configuration file \"%s\" contains errors",
-							ErrorConfFile)));
+							ErrorConfFile_save)));
 		else if (apply)
 			ereport(elevel,
 					(errcode(ERRCODE_CONFIG_FILE_ERROR),
 					 errmsg("configuration file \"%s\" contains errors; unaffected changes were applied",
-							ErrorConfFile)));
+							ErrorConfFile_save)));
 		else
 			ereport(elevel,
 					(errcode(ERRCODE_CONFIG_FILE_ERROR),
 					 errmsg("configuration file \"%s\" contains errors; no changes were applied",
-							ErrorConfFile)));
+							ErrorConfFile_save)));
 	}
+	if (ErrorConfFile_save)
+		pfree(ErrorConfFile_save);
 }
 
 /*
