pgsql: Avoid passing NULL to memcmp() in lookups of zero-argument funct

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Avoid passing NULL to memcmp() in lookups of zero-argument funct
Date: 2015-06-27 21:47:46
Message-ID: E1Z8xww-0002UB-CX@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

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

A few places assumed they could pass NULL for the argtypes array when
looking up functions known to have zero arguments. At first glance
it seems that this should be safe enough, since memcmp() is surely not
allowed to fetch any bytes if its count argument is zero. However,
close reading of the C standard says that such calls have undefined
behavior, so we'd probably best avoid it.

Since the number of places doing this is quite small, and some other
places looking up zero-argument functions were already passing dummy
arrays, let's standardize on the latter solution rather than hacking
the function lookup code to avoid calling memcmp() in these cases.
I also added Asserts to catch any future violations of the new rule.

Given the utter lack of any evidence that this actually causes any
problems in the field, I don't feel a need to back-patch this change.

Per report from Piotr Stefaniak, though this is not his patch.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/0a52d378b03b7d5ab1d64627a87edaf5ed311c6c

Modified Files
--------------
src/backend/commands/event_trigger.c | 3 ++-
src/backend/commands/foreigncmds.c | 3 ++-
src/backend/parser/parse_func.c | 6 ++++++
src/backend/utils/adt/ruleutils.c | 3 ++-
4 files changed, 12 insertions(+), 3 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tatsuo Ishii 2015-06-28 10:13:24 pgsql: Fix function declaration style to respect the coding standard.
Previous Message Andres Freund 2015-06-27 17:23:16 pgsql: Fix test_decoding's handling of nonexistant columns in old tuple