diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/extension.c | 4 | ||||
-rw-r--r-- | src/backend/libpq/hba.c | 10 | ||||
-rw-r--r-- | src/backend/utils/misc/guc-file.l | 5 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 8 | ||||
-rw-r--r-- | src/include/utils/conffiles.h | 4 |
5 files changed, 20 insertions, 11 deletions
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 806d6056ab6..cf1b1ca5716 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -60,6 +60,7 @@ #include "tcop/utility.h" #include "utils/acl.h" #include "utils/builtins.h" +#include "utils/conffiles.h" #include "utils/fmgroids.h" #include "utils/lsyscache.h" #include "utils/memutils.h" @@ -515,7 +516,8 @@ parse_extension_control_file(ExtensionControlFile *control, * Parse the file content, using GUC's file parsing code. We need not * check the return value since any errors will be thrown at ERROR level. */ - (void) ParseConfigFp(file, filename, 0, ERROR, &head, &tail); + (void) ParseConfigFp(file, filename, CONF_FILE_START_DEPTH, ERROR, + &head, &tail); FreeFile(file); diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 862ec18e913..95677c48e43 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -79,7 +79,7 @@ typedef struct /* * Memory context holding the list of TokenizedAuthLines when parsing * HBA or ident configuration files. This is created when opening the first - * file (depth of 0). + * file (depth of CONF_FILE_START_DEPTH). */ static MemoryContext tokenize_context = NULL; @@ -620,7 +620,7 @@ free_auth_file(FILE *file, int depth) FreeFile(file); /* If this is the last cleanup, remove the tokenization context */ - if (depth == 0) + if (depth == CONF_FILE_START_DEPTH) { MemoryContextDelete(tokenize_context); tokenize_context = NULL; @@ -650,7 +650,7 @@ open_auth_file(const char *filename, int elevel, int depth, * avoid dumping core due to stack overflow if an include file loops back * to itself. The maximum nesting depth is pretty arbitrary. */ - if (depth > 10) + if (depth > CONF_FILE_MAX_DEPTH) { ereport(elevel, (errcode_for_file_access(), @@ -684,7 +684,7 @@ open_auth_file(const char *filename, int elevel, int depth, * tokenization. This will be closed with this file when coming back to * this level of cleanup. */ - if (depth == 0) + if (depth == CONF_FILE_START_DEPTH) { /* * A context may be present, but assume that it has been eliminated @@ -762,7 +762,7 @@ tokenize_auth_file(const char *filename, FILE *file, List **tok_lines, initStringInfo(&buf); - if (depth == 0) + if (depth == CONF_FILE_START_DEPTH) *tok_lines = NIL; while (!feof(file) && !ferror(file)) diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index 88245475d1c..f7e4457dedc 100644 --- a/src/backend/utils/misc/guc-file.l +++ b/src/backend/utils/misc/guc-file.l @@ -202,7 +202,7 @@ ParseConfigFile(const char *config_file, bool strict, * avoid dumping core due to stack overflow if an include file loops back * to itself. The maximum nesting depth is pretty arbitrary. */ - if (depth > 10) + if (depth > CONF_FILE_MAX_DEPTH) { ereport(elevel, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), @@ -321,7 +321,8 @@ GUC_flex_fatal(const char *msg) * Input parameters: * fp: file pointer from AllocateFile for the configuration file to parse * config_file: absolute or relative path name of the configuration file - * depth: recursion depth (should be 0 in the outermost call) + * depth: recursion depth (should be CONF_FILE_START_DEPTH in the outermost + * call) * elevel: error logging level to use * Input/Output parameters: * head_p, tail_p: head and tail of linked list of name/value pairs diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 117a2d26a0e..28313b3a94a 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -44,6 +44,7 @@ #include "utils/acl.h" #include "utils/backend_status.h" #include "utils/builtins.h" +#include "utils/conffiles.h" #include "utils/float.h" #include "utils/guc_tables.h" #include "utils/memutils.h" @@ -287,7 +288,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) head = tail = NULL; if (!ParseConfigFile(ConfigFileName, true, - NULL, 0, 0, elevel, + NULL, 0, CONF_FILE_START_DEPTH, elevel, &head, &tail)) { /* Syntax error(s) detected in the file, so bail out */ @@ -304,7 +305,7 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) if (DataDir) { if (!ParseConfigFile(PG_AUTOCONF_FILENAME, false, - NULL, 0, 0, elevel, + NULL, 0, CONF_FILE_START_DEPTH, elevel, &head, &tail)) { /* Syntax error(s) detected in the file, so bail out */ @@ -4582,7 +4583,8 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt) AutoConfFileName))); /* parse it */ - if (!ParseConfigFp(infile, AutoConfFileName, 0, LOG, &head, &tail)) + if (!ParseConfigFp(infile, AutoConfFileName, CONF_FILE_START_DEPTH, + LOG, &head, &tail)) ereport(ERROR, (errcode(ERRCODE_CONFIG_FILE_ERROR), errmsg("could not parse contents of file \"%s\"", diff --git a/src/include/utils/conffiles.h b/src/include/utils/conffiles.h index 3f23a2a011b..f4d73f96b2f 100644 --- a/src/include/utils/conffiles.h +++ b/src/include/utils/conffiles.h @@ -13,6 +13,10 @@ #ifndef CONFFILES_H #define CONFFILES_H +/* recursion nesting depth for configuration files */ +#define CONF_FILE_START_DEPTH 0 +#define CONF_FILE_MAX_DEPTH 10 + extern char *AbsoluteConfigLocation(const char *location, const char *calling_file); extern char **GetConfFilesInDir(const char *includedir, |