Commit 72ed6ff5 authored by Tom Lane's avatar Tom Lane

In PQfn(), defend against too many args, and avoid dependency

on FUNC_MAX_ARGS by using an appropriate fmgr() call.
parent ef899c7f
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.28 2000/01/11 03:33:12 momjian Exp $ * $Header: /cvsroot/pgsql/src/backend/libpq/Attic/be-pqexec.c,v 1.29 2000/01/12 05:27:20 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -58,12 +58,16 @@ PQfn(int fnid, ...@@ -58,12 +58,16 @@ PQfn(int fnid,
{ {
char *retval; /* XXX - should be datum, maybe ? */ char *retval; /* XXX - should be datum, maybe ? */
char *arg[FUNC_MAX_ARGS]; char *arg[FUNC_MAX_ARGS];
bool isNull;
int i; int i;
/* ---------------- /* ----------------
* fill args[] array * 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++) for (i = 0; i < nargs; i++)
{ {
if (args[i].len == VAR_LENGTH_ARG) if (args[i].len == VAR_LENGTH_ARG)
...@@ -78,18 +82,14 @@ PQfn(int fnid, ...@@ -78,18 +82,14 @@ PQfn(int fnid,
* call the postgres function manager * call the postgres function manager
* ---------------- * ----------------
*/ */
retval = (char *) retval = fmgr_array_args(fnid, nargs, arg, &isNull);
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]);
/* ---------------- /* ----------------
* put the result in the buffer the user specified and * put the result in the buffer the user specified and
* return the proper code. * return the proper code.
* ---------------- * ----------------
*/ */
if (retval == (char *) NULL)/* void retval */ if (isNull) /* void retval */
return "0"; return "0";
if (result_is_int) if (result_is_int)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment