diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-01-28 18:04:02 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-01-28 18:04:02 +0000 |
commit | c0276244b1856537aa2a7c8abd0992c3492516fd (patch) | |
tree | 5a9874ed25d2db0e2bb5bb2967466858d993f1da | |
parent | 7af352d0913b77f387a489cd79b54b040cbee7e8 (diff) | |
download | postgresql-c0276244b1856537aa2a7c8abd0992c3492516fd.tar.gz postgresql-c0276244b1856537aa2a7c8abd0992c3492516fd.zip |
Convert variable name to canonical spelling before checking for matches
in GUCArrayAdd/GUCArrayDelete. This prevents the multiple-entry bug
exhibited by Frank Lupo 28-Jan-2003.
-rw-r--r-- | src/backend/utils/misc/guc.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index da4bae000fe..aeb044f7d17 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -5,7 +5,7 @@ * command, configuration file, and command line options. * See src/backend/utils/misc/README for more information. * - * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.112 2003/01/27 23:55:38 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.113 2003/01/28 18:04:02 tgl Exp $ * * Copyright 2000 by PostgreSQL Global Development Group * Written by Peter Eisentraut <peter_e@gmx.net>. @@ -2834,6 +2834,7 @@ ProcessGUCArray(ArrayType *array, GucSource source) ArrayType * GUCArrayAdd(ArrayType *array, const char *name, const char *value) { + const char *varname; Datum datum; char *newval; ArrayType *a; @@ -2846,6 +2847,10 @@ GUCArrayAdd(ArrayType *array, const char *name, const char *value) superuser() ? PGC_SUSET : PGC_USERSET, PGC_S_SESSION, false, false); + /* convert name to canonical spelling, so we can use plain strcmp */ + (void) GetConfigOptionByName(name, &varname); + name = varname; + newval = palloc(strlen(name) + 1 + strlen(value) + 1); sprintf(newval, "%s=%s", name, value); datum = DirectFunctionCall1(textin, CStringGetDatum(newval)); @@ -2909,6 +2914,7 @@ GUCArrayAdd(ArrayType *array, const char *name, const char *value) ArrayType * GUCArrayDelete(ArrayType *array, const char *name) { + const char *varname; ArrayType *newarray; int i; int index; @@ -2920,6 +2926,10 @@ GUCArrayDelete(ArrayType *array, const char *name) superuser() ? PGC_SUSET : PGC_USERSET, PGC_S_SESSION, false, false); + /* convert name to canonical spelling, so we can use plain strcmp */ + (void) GetConfigOptionByName(name, &varname); + name = varname; + /* if array is currently null, then surely nothing to delete */ if (!array) return NULL; |