From 5d1e5c8b758770186b005a1c3888b05e37af79c5 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Mon, 18 Jan 2021 14:48:43 +0200 Subject: [PATCH] Check for BuildIndexValueDescription returning NULL in gist_page_items Per Coverity. BuildIndexValueDescription() cannot actually return NULL in this instance, because it only returns NULL if the user doesn't have the required privileges, and this function can only be used by superuser. But better safe than sorry. --- contrib/pageinspect/gistfuncs.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/contrib/pageinspect/gistfuncs.c b/contrib/pageinspect/gistfuncs.c index 6e1ea04b346..d5da1ea839a 100644 --- a/contrib/pageinspect/gistfuncs.c +++ b/contrib/pageinspect/gistfuncs.c @@ -247,14 +247,20 @@ gist_page_items(PG_FUNCTION_ARGS) index_deform_tuple(itup, RelationGetDescr(indexRel), itup_values, itup_isnull); - key_desc = BuildIndexValueDescription(indexRel, itup_values, itup_isnull); - memset(nulls, 0, sizeof(nulls)); values[0] = DatumGetInt16(offset); values[1] = ItemPointerGetDatum(&itup->t_tid); values[2] = Int32GetDatum((int) IndexTupleSize(itup)); - values[3] = CStringGetTextDatum(key_desc); + + key_desc = BuildIndexValueDescription(indexRel, itup_values, itup_isnull); + if (key_desc) + values[3] = CStringGetTextDatum(key_desc); + else + { + values[3] = (Datum) 0; + nulls[3] = true; + } tuplestore_putvalues(tupstore, tupdesc, values, nulls); }