summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2000-01-12 05:27:20 +0000
committerTom Lane2000-01-12 05:27:20 +0000
commit29fa7b60b11345c2f065b064e969cdd898775beb (patch)
treecfe04ca6ae59f7ceedbd3c8bc27712ac0c8f07c0
parent8aad62aea140613d2e3596fdab0983e6c47e13cd (diff)
In PQfn(), defend against too many args, and avoid dependency
on FUNC_MAX_ARGS by using an appropriate fmgr() call.
-rw-r--r--src/backend/libpq/be-pqexec.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/backend/libpq/be-pqexec.c b/src/backend/libpq/be-pqexec.c
index fa3da6c18f..c8ee504dca 100644
--- a/src/backend/libpq/be-pqexec.c
+++ b/src/backend/libpq/be-pqexec.c
@@ -58,12 +58,16 @@ PQfn(int fnid,
{
char *retval; /* XXX - should be datum, maybe ? */
char *arg[FUNC_MAX_ARGS];
+ bool isNull;
int i;
/* ----------------
* fill args[] array
* ----------------
*/
+ if (nargs > FUNC_MAX_ARGS)
+ elog(ERROR, "functions cannot have more than %d arguments",
+ FUNC_MAX_ARGS);
for (i = 0; i < nargs; i++)
{
if (args[i].len == VAR_LENGTH_ARG)
@@ -78,18 +82,14 @@ PQfn(int fnid,
* call the postgres function manager
* ----------------
*/
- retval = (char *)
- fmgr(fnid, arg[0], arg[1], arg[2], arg[3],
- arg[4], arg[5], arg[6], arg[7],
- arg[8], arg[9], arg[10], arg[11],
- arg[12], arg[13], arg[14], arg[15]);
+ retval = fmgr_array_args(fnid, nargs, arg, &isNull);
/* ----------------
* put the result in the buffer the user specified and
* return the proper code.
* ----------------
*/
- if (retval == (char *) NULL)/* void retval */
+ if (isNull) /* void retval */
return "0";
if (result_is_int)