First version of the patch assert_nargs_is_large_enough
authorGurjeet Singh <gurjeet@singh.im>
Tue, 7 Feb 2023 18:48:06 +0000 (10:48 -0800)
committerGurjeet Singh <gurjeet@singh.im>
Tue, 7 Feb 2023 18:48:06 +0000 (10:48 -0800)
src/include/fmgr.h

index b120f5e7fefac6542f4e218a566bf25d7d4e93b2..a445ac56b9f02456c1c9609d2659d0b6985cf2b6 100644 (file)
@@ -206,7 +206,7 @@ extern void fmgr_symbol(Oid functionId, char **mod, char **fn);
  * If function is not marked "proisstrict" in pg_proc, it must check for
  * null arguments using this macro.  Do not try to GETARG a null argument!
  */
-#define PG_ARGISNULL(n)  (fcinfo->args[n].isnull)
+#define PG_ARGISNULL(n)  (AssertMacro(n < PG_NARGS()), fcinfo->args[n].isnull)
 
 /*
  * Support for fetching detoasted copies of toastable datatypes (all of
@@ -265,7 +265,7 @@ extern struct varlena *pg_detoast_datum_packed(struct varlena *datum);
 
 /* Macros for fetching arguments of standard types */
 
-#define PG_GETARG_DATUM(n)  (fcinfo->args[n].value)
+#define PG_GETARG_DATUM(n)  (AssertMacro(n < PG_NARGS()), fcinfo->args[n].value)
 #define PG_GETARG_INT32(n)  DatumGetInt32(PG_GETARG_DATUM(n))
 #define PG_GETARG_UINT32(n)  DatumGetUInt32(PG_GETARG_DATUM(n))
 #define PG_GETARG_INT16(n)  DatumGetInt16(PG_GETARG_DATUM(n))