From c0276244b1856537aa2a7c8abd0992c3492516fd Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 28 Jan 2003 18:04:02 +0000 Subject: [PATCH] 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. --- src/backend/utils/misc/guc.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index da4bae000f..aeb044f7d1 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 . @@ -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;