Re: [BUG FIX] Uninitialized var fargtypes used.

Alvaro Herrera <alvherre@2ndquadrant.com>

From: Alvaro Herrera <alvherre@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Kyotaro Horiguchi <horikyota.ntt@gmail.com>, ranier_gyn@hotmail.com, pgsql-bugs@lists.postgresql.org
Date: 2019-11-12T20:10:46Z
Lists: pgsql-bugs
On 2019-Nov-12, Tom Lane wrote:

> If we're going to revert 0a52d378b03b we should just treat the
> problem straightforwardly.  I was imagining
> 
> -        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)
> 
> It's really stretching credulity to imagine that one more test-and-branch
> in this loop costs anything worth noticing, especially compared to the
> costs of having built the list to begin with.  So I'm now feeling that
> 0a52d378b03b was penny-wise and pound-foolish.

I pushed using that approach.

For a minute I thought that it should also test that clist->nargs also
equals 0, but that turns out not to be necessary since the number of
arguments is already considered by FuncnameGetCandidates above.

Thanks

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Commits

  1. Finish reverting commit 0a52d378b.

  2. Have LookupFuncName accept NULL argtypes for 0 args

  3. Avoid passing NULL to memcmp() in lookups of zero-argument functions.