aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_func.c
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2019-11-12 17:04:46 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2019-11-12 17:06:58 -0300
commitdcb7d3cafa3197c5425c129ba0dc5eddd23c0532 (patch)
tree9cba76bdf06895c94fc2f8e4528c8c7061af60ad /src/backend/parser/parse_func.c
parent8c951687f58ad604be13e6addfd56446afb36e13 (diff)
downloadpostgresql-dcb7d3cafa3197c5425c129ba0dc5eddd23c0532.tar.gz
postgresql-dcb7d3cafa3197c5425c129ba0dc5eddd23c0532.zip
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 0a52d378b03b. 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
Diffstat (limited to 'src/backend/parser/parse_func.c')
-rw-r--r--src/backend/parser/parse_func.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index 8e926539e6a..9d9efc2cc24 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;
}