Check that result tupdesc has exactly 1 column in return_next scalar case.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 Nov 2016 21:48:12 +0000 (16:48 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 Nov 2016 21:48:19 +0000 (16:48 -0500)
This should always be true, but since we're relying on a tuple descriptor
passed from outside pltcl itself, let's check.  Per a gripe from Coverity.

src/pl/tcl/pltcl.c

index b0d9e419bb92439f0c49e31eaa3f06dc6b890999..5cb4ee85e0045952be3511b838f735be2ba0300c 100644 (file)
@@ -2192,6 +2192,10 @@ pltcl_returnnext(ClientData cdata, Tcl_Interp *interp,
        Datum       retval;
        bool        isNull = false;
 
+       /* for paranoia's sake, check that tupdesc has exactly one column */
+       if (call_state->ret_tupdesc->natts != 1)
+           elog(ERROR, "wrong result type supplied in return_next");
+
        retval = InputFunctionCall(&prodesc->result_in_func,
                                   utf_u2e((char *) Tcl_GetString(objv[1])),
                                   prodesc->result_typioparam,