pgsql: Fix incorrect presorted DISTINCT aggregate if condition

Поиск
Список
Период
Сортировка
От David Rowley
Тема pgsql: Fix incorrect presorted DISTINCT aggregate if condition
Дата
Msg-id E1pRTRG-000tPj-V6@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix incorrect presorted DISTINCT aggregate if condition

Here we fix a faulty "if" condition which failed to correctly handle two
or more consecutive NULL transition values when checking if the new value
is DISTINCT from the old value for presorted aggregates.  Given a suitably
non-strict aggregate transition function, a byref aggregate could cause a
crash due to calling the type's equality function and passing along a
(Datum) 0 value to test for equality, the equality function would then try
to dereference that 0 Datum and segfault.  For byval types, there'd have
been no crash and the equality function would have seen that the two 0
Datums matched, which (only by chance) meant the calling code would have
worked correctly.

Here we ensure that we only call the equality function when neither of
the input values are NULL.

This code is all new as of 1349d2790, so no backpatch needed.

Reported-by: Fujii Masao
Discussion: https://postgr.es/m/860c6d6f-a3c5-3ae9-9da2-827177bede06@oss.nttdata.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/7da51590ed6cd46ff886e8e4d08e8703db9c2b5b

Modified Files
--------------
src/backend/executor/execExprInterp.c    | 6 +++---
src/test/regress/expected/aggregates.out | 8 ++++++++
src/test/regress/sql/aggregates.sql      | 4 ++++
3 files changed, 15 insertions(+), 3 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: David Rowley
Дата:
Сообщение: pgsql: Disable WindowAgg inverse transitions when subplans are present
Следующее
От: Peter Eisentraut
Дата:
Сообщение: pgsql: Consolidate ItemPointer to Datum conversion functions