From: Tom Lane Date: Wed, 12 Jan 2000 05:27:20 +0000 (+0000) Subject: In PQfn(), defend against too many args, and avoid dependency X-Git-Tag: REL9_0_0~24196 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=72ed6ff5ad100972e1bf29cef7128102a4598b67;p=pg-rex%2Fsyncrep.git In PQfn(), defend against too many args, and avoid dependency on FUNC_MAX_ARGS by using an appropriate fmgr() call. --- diff --git a/src/backend/libpq/be-pqexec.c b/src/backend/libpq/be-pqexec.c index 2f32a519ea..e32b30906f 100644 --- a/src/backend/libpq/be-pqexec.c +++ b/src/backend/libpq/be-pqexec.c @@ -8,7 +8,7 @@ * * * 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, { 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)