]> granicus.if.org Git - postgresql/commitdiff
Fix misuse of TextDatumGetCString().
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 2 Jul 2015 21:02:08 +0000 (17:02 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 2 Jul 2015 21:02:14 +0000 (17:02 -0400)
"TextDatumGetCString(PG_GETARG_TEXT_P(x))" is formally wrong: a text*
is not a Datum.  Although this coding will accidentally fail to fail on
all known platforms, it risks leaking memory if a detoast step is needed,
unlike "TextDatumGetCString(PG_GETARG_DATUM(x))" which is what's used
elsewhere.  Make pg_get_object_address() fall in line with other uses.

Noted while reviewing two-arg current_setting() patch.

src/backend/catalog/objectaddress.c

index 83390f6bab00706e1b4c7d86f84f55b17c932340..052aab1003de2e7a763e2bb8cf2623122731907f 100644 (file)
@@ -1831,7 +1831,7 @@ textarray_to_strvaluelist(ArrayType *arr)
 Datum
 pg_get_object_address(PG_FUNCTION_ARGS)
 {
-       char       *ttype = TextDatumGetCString(PG_GETARG_TEXT_P(0));
+       char       *ttype = TextDatumGetCString(PG_GETARG_DATUM(0));
        ArrayType  *namearr = PG_GETARG_ARRAYTYPE_P(1);
        ArrayType  *argsarr = PG_GETARG_ARRAYTYPE_P(2);
        int                     itype;