diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c index 6b022af4ab..f021d71a5c 100644 --- a/src/backend/commands/event_trigger.c +++ b/src/backend/commands/event_trigger.c @@ -171,7 +171,6 @@ CreateEventTrigger(CreateEventTrigStmt *stmt) HeapTuple tuple; Oid funcoid; Oid funcrettype; - Oid fargtypes[1]; /* dummy */ Oid evtowner = GetUserId(); ListCell *lc; List *tags = NULL; @@ -237,7 +236,7 @@ CreateEventTrigger(CreateEventTrigStmt *stmt) stmt->trigname))); /* Find and validate the trigger function. */ - funcoid = LookupFuncName(stmt->funcname, 0, fargtypes, false); + funcoid = LookupFuncName(stmt->funcname, 0, NULL, false); funcrettype = get_func_rettype(funcoid); if (funcrettype != EVTTRIGGEROID) ereport(ERROR, diff --git a/src/backend/commands/foreigncmds.c b/src/backend/commands/foreigncmds.c index f96c278a6a..766c9f95c8 100644 --- a/src/backend/commands/foreigncmds.c +++ b/src/backend/commands/foreigncmds.c @@ -475,13 +475,12 @@ static Oid lookup_fdw_handler_func(DefElem *handler) { Oid handlerOid; - Oid funcargtypes[1]; /* dummy */ if (handler == NULL || handler->arg == NULL) return InvalidOid; /* handlers have no arguments */ - handlerOid = LookupFuncName((List *) handler->arg, 0, funcargtypes, false); + handlerOid = LookupFuncName((List *) handler->arg, 0, NULL, false); /* check that handler has correct return type */ if (get_func_rettype(handlerOid) != FDW_HANDLEROID) diff --git a/src/backend/commands/proclang.c b/src/backend/commands/proclang.c index 343cd1dbb0..b51c373b93 100644 --- a/src/backend/commands/proclang.c +++ b/src/backend/commands/proclang.c @@ -105,7 +105,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) * return type. */ funcname = SystemFuncName(pltemplate->tmplhandler); - handlerOid = LookupFuncName(funcname, 0, funcargtypes, true); + handlerOid = LookupFuncName(funcname, 0, NULL, true); if (OidIsValid(handlerOid)) { funcrettype = get_func_rettype(handlerOid); @@ -263,7 +263,7 @@ CreateProceduralLanguage(CreatePLangStmt *stmt) * Lookup the PL handler function and check that it is of the expected * return type */ - handlerOid = LookupFuncName(stmt->plhandler, 0, funcargtypes, false); + handlerOid = LookupFuncName(stmt->plhandler, 0, NULL, false); funcrettype = get_func_rettype(handlerOid); if (funcrettype != LANGUAGE_HANDLEROID) { diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index cef6d02f51..84144b46b1 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -179,7 +179,6 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, ScanKeyData key; Relation pgrel; HeapTuple tuple; - Oid fargtypes[1]; /* dummy */ Oid funcrettype; Oid trigoid; char internaltrigname[NAMEDATALEN]; @@ -690,7 +689,7 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString, * Find and validate the trigger function. */ if (!OidIsValid(funcoid)) - funcoid = LookupFuncName(stmt->funcname, 0, fargtypes, false); + funcoid = LookupFuncName(stmt->funcname, 0, NULL, false); if (!isInternal) { aclresult = pg_proc_aclcheck(funcoid, GetUserId(), ACL_EXECUTE); diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c index 8e926539e6..9d9efc2cc2 100644 --- a/src/backend/parser/parse_func.c +++ b/src/backend/parser/parse_func.c @@ -2035,8 +2035,8 @@ LookupFuncNameInternal(List *funcname, int nargs, const Oid *argtypes, { FuncCandidateList clist; - /* Passing NULL for argtypes is no longer allowed */ - Assert(argtypes); + /* NULL argtypes allowed for nullary functions only */ + Assert(argtypes != NULL || nargs == 0); /* Always set *lookupError, to forestall uninitialized-variable warnings */ *lookupError = FUNCLOOKUP_NOSUCHFUNC; @@ -2070,7 +2070,9 @@ LookupFuncNameInternal(List *funcname, int nargs, const Oid *argtypes, */ while (clist) { - if (memcmp(argtypes, clist->args, nargs * sizeof(Oid)) == 0) + /* if nargs==0, argtypes can be null; don't pass that to memcmp */ + if (nargs == 0 || + memcmp(argtypes, clist->args, nargs * sizeof(Oid)) == 0) return clist->oid; clist = clist->next; } diff --git a/src/pl/tcl/pltcl.c b/src/pl/tcl/pltcl.c index 73e12788fc..e7640008fd 100644 --- a/src/pl/tcl/pltcl.c +++ b/src/pl/tcl/pltcl.c @@ -592,7 +592,6 @@ call_pltcl_start_proc(Oid prolang, bool pltrusted) const char *gucname; ErrorContextCallback errcallback; List *namelist; - Oid fargtypes[1]; /* dummy */ Oid procOid; HeapTuple procTup; Form_pg_proc procStruct; @@ -616,7 +615,7 @@ call_pltcl_start_proc(Oid prolang, bool pltrusted) /* Parse possibly-qualified identifier and look up the function */ namelist = stringToQualifiedNameList(start_proc); - procOid = LookupFuncName(namelist, 0, fargtypes, false); + procOid = LookupFuncName(namelist, 0, NULL, false); /* Current user must have permission to call function */ aclresult = pg_proc_aclcheck(procOid, GetUserId(), ACL_EXECUTE);