From 72ed6ff5ad100972e1bf29cef7128102a4598b67 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 12 Jan 2000 05:27:20 +0000
Subject: [PATCH] In PQfn(), defend against too many args, and avoid dependency
 on FUNC_MAX_ARGS by using an appropriate fmgr() call.

---
 src/backend/libpq/be-pqexec.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/backend/libpq/be-pqexec.c b/src/backend/libpq/be-pqexec.c
index 2f32a519eae..e32b30906f6 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)
-- 
GitLab