diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-01-28 18:04:13 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-01-28 18:04:13 +0000 |
commit | c95ed02c49dd78efda25dd3f79b7508575e9488d (patch) | |
tree | 0055adce237c4e4f9b871f7d85699919a69eb57b | |
parent | 93c3f36d2292f410e20966c08ca4dca680bbeeef (diff) |
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 89083db9b48..edb5e353644 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.99.2.3 2003/01/28 03:44:09 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.99.2.4 2003/01/28 18:04:13 tgl Exp $ * * Copyright 2000 by PostgreSQL Global Development Group * Written by Peter Eisentraut <peter_e@gmx.net>. @@ -2802,6 +2802,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; @@ -2814,6 +2815,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)); @@ -2877,6 +2882,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; @@ -2888,6 +2894,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; |