Add a check for trigger function with declared arguments. This path
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 6 Jul 2005 16:42:10 +0000 (16:42 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 6 Jul 2005 16:42:10 +0000 (16:42 +0000)
could not be reached before, but now that there is a plpgsql validator
function, it can be.  Check is needed to prevent core dump reported by
Satoshi Nagayasu.  Besides, this gives a more specific and useful
error message for a fairly common novice error.

src/pl/plpgsql/src/pl_comp.c

index 38b3d077de21221011559bd737572695be84c060..d3557ca5805063e1d072a3b59c345f85ad46db46 100644 (file)
@@ -3,7 +3,7 @@
  *                       procedural language
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.91 2005/06/10 16:23:11 neilc Exp $
+ *       $PostgreSQL: pgsql/src/pl/plpgsql/src/pl_comp.c,v 1.92 2005/07/06 16:42:10 tgl Exp $
  *
  *       This software is copyrighted by Jan Wieck - Hamburg.
  *
@@ -547,6 +547,13 @@ do_compile(FunctionCallInfo fcinfo,
                        function->fn_retistuple = true;
                        function->fn_retset = false;
 
+                       /* shouldn't be any declared arguments */
+                       if (procStruct->pronargs != 0)
+                               ereport(ERROR,
+                                               (errcode(ERRCODE_INVALID_FUNCTION_DEFINITION),
+                                                errmsg("trigger functions cannot have declared arguments"),
+                                                errhint("You probably want to use TG_NARGS and TG_ARGV instead.")));
+
                        /* Add the record for referencing NEW */
                        rec = palloc0(sizeof(PLpgSQL_rec));
                        rec->dtype = PLPGSQL_DTYPE_REC;