mirror of
https://github.com/postgres/postgres.git
synced 2025-11-06 07:49:08 +03:00
Have LookupFuncName accept NULL argtypes for 0 args
Prior to this change, it requires to be passed a valid pointer just to
be able to pass it to a zero-byte memcmp, per 0a52d378b0. Given the
strange resulting code in callsites, it seems better to test for the
case specifically and remove the requirement.
Reported-by: Ranier Vilela
Discussion: https://postgr.es/m/MN2PR18MB2927F24692485D754794F01BE3740@MN2PR18MB2927.namprd18.prod.outlook.com
Discussion: https://postgr.es/m/MN2PR18MB2927F6873DF2774A505AC298E3740@MN2PR18MB2927.namprd18.prod.outlook.com
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user