pgsql: Fix null-pointer-deref crash while doing COPY IN with check cons

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix null-pointer-deref crash while doing COPY IN with check cons
Date: 2015-02-16 04:27:08
Message-ID: E1YNDH2-0007QU-1C@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix null-pointer-deref crash while doing COPY IN with check constraints.

In commit bf7ca15875988a88e97302e012d7c4808bef3ea9 I introduced an
assumption that an RTE referenced by a whole-row Var must have a valid eref
field. This is false for RTEs constructed by DoCopy, and there are other
places taking similar shortcuts. Perhaps we should make all those places
go through addRangeTableEntryForRelation or its siblings instead of having
ad-hoc logic, but the most reliable fix seems to be to make the new code in
ExecEvalWholeRowVar cope if there's no eref. We can reasonably assume that
there's no need to insert column aliases if no aliases were provided.

Add a regression test case covering this, and also verifying that a sane
column name is in fact available in this situation.

Although the known case only crashes in 9.4 and HEAD, it seems prudent to
back-patch the code change to 9.2, since all the ingredients for a similar
failure exist in the variant patch applied to 9.3 and 9.2.

Per report from Jean-Pierre Pelletier.

Branch
------
REL9_2_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/effcaa4c286da355e7ee59a6e774c4cd7a0ea4f5

Modified Files
--------------
src/backend/executor/execQual.c | 7 +++++--
src/test/regress/expected/copy2.out | 35 +++++++++++++++++++++++++++++++++++
src/test/regress/sql/copy2.sql | 17 +++++++++++++++++
3 files changed, 57 insertions(+), 2 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Fujii Masao 2015-02-16 05:51:13 pgsql: Correct the path of pg_lzcompress.c in doc.
Previous Message Andrew Dunstan 2015-02-15 22:08:48 pgsql: Minor housekeeping on JSON docs.