From 737639017c87d5a0a466e8676f1eadc61d775c78 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sat, 23 Sep 2017 15:01:59 -0400 Subject: [PATCH] Fix bogus size calculation in strlist_to_textarray(). It's making an array of Datum, not an array of text *. The mistake is harmless since those are currently the same size, but it's still wrong. --- src/backend/catalog/objectaddress.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/catalog/objectaddress.c b/src/backend/catalog/objectaddress.c index 6cac2dfd1d..c2ad7c675e 100644 --- a/src/backend/catalog/objectaddress.c +++ b/src/backend/catalog/objectaddress.c @@ -5051,7 +5051,7 @@ getRelationIdentity(StringInfo buffer, Oid relid, List **object) } /* - * Auxiliary function to return a TEXT array out of a list of C-strings. + * Auxiliary function to build a TEXT array out of a list of C-strings. */ ArrayType * strlist_to_textarray(List *list) @@ -5063,12 +5063,14 @@ strlist_to_textarray(List *list) MemoryContext memcxt; MemoryContext oldcxt; + /* Work in a temp context; easier than individually pfree'ing the Datums */ memcxt = AllocSetContextCreate(CurrentMemoryContext, "strlist to array", ALLOCSET_DEFAULT_SIZES); oldcxt = MemoryContextSwitchTo(memcxt); - datums = palloc(sizeof(text *) * list_length(list)); + datums = (Datum *) palloc(sizeof(Datum) * list_length(list)); + foreach(cell, list) { char *name = lfirst(cell); @@ -5080,6 +5082,7 @@ strlist_to_textarray(List *list) arr = construct_array(datums, list_length(list), TEXTOID, -1, false, 'i'); + MemoryContextDelete(memcxt); return arr; -- 2.40.0