diff options
author | Tom Lane | 2000-01-12 05:27:20 +0000 |
---|---|---|
committer | Tom Lane | 2000-01-12 05:27:20 +0000 |
commit | 29fa7b60b11345c2f065b064e969cdd898775beb (patch) | |
tree | cfe04ca6ae59f7ceedbd3c8bc27712ac0c8f07c0 | |
parent | 8aad62aea140613d2e3596fdab0983e6c47e13cd (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.c | 12 |
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) |