Finish reverting commit 0a52d378b.
authorTom Lane <[email protected]>
Tue, 12 Nov 2019 21:58:00 +0000 (16:58 -0500)
committerTom Lane <[email protected]>
Tue, 12 Nov 2019 21:58:08 +0000 (16:58 -0500)
Apply the solution adopted in commit dcb7d3caf (ie, explicitly
don't call memcmp for a zero-length comparison) to func_get_detail()
as well, removing one other place where we were passing an
uninitialized array to a parse_func.c entry point.

Discussion: https://postgr.es/m/MN2PR18MB2927F24692485D754794F01BE3740@MN2PR18MB2927.namprd18.prod.outlook.com
Discussion: https://postgr.es/m/MN2PR18MB2927F6873DF2774A505AC298E3740@MN2PR18MB2927.namprd18.prod.outlook.com

src/backend/parser/parse_func.c
src/backend/utils/adt/ruleutils.c

index 9d9efc2cc247aebea93b7f56d6e2f9cddb5dd59d..d9c6dc1901858bfccfe07e07a920c1a8df55afc0 100644 (file)
@@ -1397,9 +1397,6 @@ func_get_detail(List *funcname,
        FuncCandidateList raw_candidates;
        FuncCandidateList best_candidate;
 
-       /* Passing NULL for argtypes is no longer allowed */
-       Assert(argtypes);
-
        /* initialize output arguments to silence compiler warnings */
        *funcid = InvalidOid;
        *rettype = InvalidOid;
@@ -1423,7 +1420,9 @@ func_get_detail(List *funcname,
                 best_candidate != NULL;
                 best_candidate = best_candidate->next)
        {
-               if (memcmp(argtypes, best_candidate->args, nargs * sizeof(Oid)) == 0)
+               /* if nargs==0, argtypes can be null; don't pass that to memcmp */
+               if (nargs == 0 ||
+                       memcmp(argtypes, best_candidate->args, nargs * sizeof(Oid)) == 0)
                        break;
        }
 
index c1de869c5216801d8bbb400db53e35084e634d7d..4c83cae5e922b53d2f059f5878f64a0a7797a1d8 100644 (file)
@@ -833,7 +833,6 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty)
        char       *tgname;
        char       *tgoldtable;
        char       *tgnewtable;
-       Oid                     argtypes[1];    /* dummy */
        Datum           value;
        bool            isnull;
 
@@ -1045,7 +1044,7 @@ pg_get_triggerdef_worker(Oid trigid, bool pretty)
 
        appendStringInfo(&buf, "EXECUTE FUNCTION %s(",
                                         generate_function_name(trigrec->tgfoid, 0,
-                                                                                       NIL, argtypes,
+                                                                                       NIL, NULL,
                                                                                        false, NULL, EXPR_KIND_NONE));
 
        if (trigrec->tgnargs > 0)