From 24541ffd788d56009126fff52b2341ada6c84245 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 23 Sep 2017 15:16:48 -0400 Subject: [PATCH] ... and the very same bug in publicationListToArray(). Sigh. --- src/backend/commands/subscriptioncmds.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 372fa1b634..086a6ef85e 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -244,7 +244,7 @@ parse_subscription_options(List *options, bool *connect, bool *enabled_given, } /* - * Auxiliary function to return a text array out of a list of String nodes. + * Auxiliary function to build a text array out of a list of String nodes. */ static Datum publicationListToArray(List *publist) @@ -264,7 +264,8 @@ publicationListToArray(List *publist) ALLOCSET_DEFAULT_MAXSIZE); oldcxt = MemoryContextSwitchTo(memcxt); - datums = palloc(sizeof(text *) * list_length(publist)); + datums = (Datum *) palloc(sizeof(Datum) * list_length(publist)); + foreach(cell, publist) { char *name = strVal(lfirst(cell)); @@ -275,7 +276,7 @@ publicationListToArray(List *publist) { char *pname = strVal(lfirst(pcell)); - if (name == pname) + if (pcell == cell) break; if (strcmp(name, pname) == 0) @@ -292,6 +293,7 @@ publicationListToArray(List *publist) arr = construct_array(datums, list_length(publist), TEXTOID, -1, false, 'i'); + MemoryContextDelete(memcxt); return PointerGetDatum(arr);