aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2003-01-28 18:04:02 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2003-01-28 18:04:02 +0000
commitc0276244b1856537aa2a7c8abd0992c3492516fd (patch)
tree5a9874ed25d2db0e2bb5bb2967466858d993f1da
parent7af352d0913b77f387a489cd79b54b040cbee7e8 (diff)
downloadpostgresql-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.c12
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;