diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index c7ad6f96f863d618235f2abc298cccea384a3508..e0b81b9eb5139e8db3c4de25ca3bec7ffaab21bb 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -620,8 +620,6 @@ transformRelOptions(Datum oldOptions, List *defList, char *namspace, int noldoptions; int i; - Assert(ARR_ELEMTYPE(array) == TEXTOID); - deconstruct_array(array, TEXTOID, -1, false, 'i', &oldoptions, NULL, &noldoptions); @@ -777,8 +775,6 @@ untransformRelOptions(Datum options) array = DatumGetArrayTypeP(options); - Assert(ARR_ELEMTYPE(array) == TEXTOID); - deconstruct_array(array, TEXTOID, -1, false, 'i', &optiondatums, NULL, &noptions); @@ -912,14 +908,10 @@ parseRelOptions(Datum options, bool validate, relopt_kind kind, /* Done if no options */ if (PointerIsValid(DatumGetPointer(options))) { - ArrayType *array; + ArrayType *array = DatumGetArrayTypeP(options); Datum *optiondatums; int noptions; - array = DatumGetArrayTypeP(options); - - Assert(ARR_ELEMTYPE(array) == TEXTOID); - deconstruct_array(array, TEXTOID, -1, false, 'i', &optiondatums, NULL, &noptions); @@ -959,6 +951,11 @@ parseRelOptions(Datum options, bool validate, relopt_kind kind, errmsg("unrecognized parameter \"%s\"", s))); } } + + /* It's worth avoiding memory leaks in this function */ + pfree(optiondatums); + if (((void *) array) != DatumGetPointer(options)) + pfree(array); } *numrelopts = numoptions;