Re: array_agg(DISTINCT) caused a segmentation fault
David Rowley <dgrowleyml@gmail.com>
From: David Rowley <dgrowleyml@gmail.com>
To: Fujii Masao <masao.fujii@oss.nttdata.com>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2023-02-13T07:44:02Z
Lists: pgsql-bugs
On Mon, 13 Feb 2023 at 18:29, Fujii Masao <masao.fujii@oss.nttdata.com> wrote: > =# SELECT array_agg(distinct val) FROM (SELECT NULL AS val FROM generate_series(1, 2)) hoge; > LOG: server process (PID 76507) was terminated by signal 11: Segmentation fault: 11 > DETAIL: Failed process was running: SELECT array_agg(distinct val) FROM (SELECT NULL AS val FROM generate_series(1, 2)) hoge; This was a fairly trivial logic bug in ExecEvalPreOrderedDistinctSingle(). The JIT code calls that same function and ExecEvalPreOrderedDistinctMulti() uses the standard expression evaluation logic. So looks like the problem is just isolated to ExecEvalPreOrderedDistinctSingle(). I've now pushed a fix for it and included your test. To get it to crash it needed to be a byref aggregate without a strict transition function. There are not too many of those, which is probably why nobody noticed this before. David
Commits
-
Fix pfree issue in presorted DISTINCT aggregate code
- ec5a010ab25b 16.0 landed
-
Fix incorrect presorted DISTINCT aggregate if condition
- 7da51590ed6c 16.0 landed