mirror of
https://github.com/postgres/postgres.git
synced 2025-11-06 07:49:08 +03:00
Introduce variables for initial and max nesting depth on configuration files
The code has been assuming already in a few places that the initial
recursion nesting depth is 0, and the recent changes in hba.c (mainly
783e8c6) have relies on this assumption in more places. The maximum
recursion nesting level is assumed to be 10 for hba.c and GUCs.
Author: Julien Rouhaud
Discussion: https://postgr.es/m/20221124090724.n7amf5kpdhx6vb76@jrouhaud
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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\"",
|
||||
|
||||
Reference in New Issue
Block a user