Re: array_agg(DISTINCT) caused a segmentation fault
Fujii Masao <masao.fujii@oss.nttdata.com>
From: Fujii Masao <masao.fujii@oss.nttdata.com>
To: David Rowley <dgrowleyml@gmail.com>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2023-02-13T09:03:58Z
Lists: pgsql-bugs
On 2023/02/13 16:44, David Rowley wrote: > 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. Thanks for the fix! Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION
Commits
-
Fix pfree issue in presorted DISTINCT aggregate code
- ec5a010ab25b 16.0 landed
-
Fix incorrect presorted DISTINCT aggregate if condition
- 7da51590ed6c 16.0 landed