Обсуждение: [HACKERS] `array_position...()` causes SIGSEGV

Поиск
Список
Период
Сортировка

[HACKERS] `array_position...()` causes SIGSEGV

От
Junseok Yang
Дата:
Hello hackers,

I met SIGSEGV when using `array_position()` with record type
arguments, so I've written a patch which corrects this problem. It
seems that `array_position...()` sets wrong memory context for the
cached function (in this case `record_eq()`) which is used to find a
matching element.

The problem is reproducable with the following query.

SELECT array_position(ids, (1, 1))
FROM (VALUES (ARRAY[(0, 0)]), (ARRAY[(1, 1)])) AS _(ids);

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Вложения

Re: [HACKERS] `array_position...()` causes SIGSEGV

От
Michael Paquier
Дата:
On Fri, Dec 9, 2016 at 3:14 PM, Junseok Yang <jsyang@bitnine.net> wrote:
> I met SIGSEGV when using `array_position()` with record type
> arguments, so I've written a patch which corrects this problem. It
> seems that `array_position...()` sets wrong memory context for the
> cached function (in this case `record_eq()`) which is used to find a
> matching element.
>
> The problem is reproducable with the following query.
>
> SELECT array_position(ids, (1, 1))
> FROM (VALUES (ARRAY[(0, 0)]), (ARRAY[(1, 1)])) AS _(ids);

Good catch. That's present since 13dbc7a8 and the introduction of
array_offset(), or array_position() on HEAD, so the patch should be
applied down to 9.5.
-- 
Michael



Re: [HACKERS] `array_position...()` causes SIGSEGV

От
Alvaro Herrera
Дата:
Michael Paquier wrote:
> On Fri, Dec 9, 2016 at 3:14 PM, Junseok Yang <jsyang@bitnine.net> wrote:
> > I met SIGSEGV when using `array_position()` with record type
> > arguments, so I've written a patch which corrects this problem. It
> > seems that `array_position...()` sets wrong memory context for the
> > cached function (in this case `record_eq()`) which is used to find a
> > matching element.
> >
> > The problem is reproducable with the following query.
> >
> > SELECT array_position(ids, (1, 1))
> > FROM (VALUES (ARRAY[(0, 0)]), (ARRAY[(1, 1)])) AS _(ids);
> 
> Good catch. That's present since 13dbc7a8 and the introduction of
> array_offset(), or array_position() on HEAD, so the patch should be
> applied down to 9.5.

Thanks for CC'ing me.  Looking now.

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Re: [HACKERS] `array_position...()` causes SIGSEGV

От
Alvaro Herrera
Дата:
Junseok Yang wrote:
> Hello hackers,
> 
> I met SIGSEGV when using `array_position()` with record type
> arguments, so I've written a patch which corrects this problem. It
> seems that `array_position...()` sets wrong memory context for the
> cached function (in this case `record_eq()`) which is used to find a
> matching element.

Looks correct to me, so pushed to all affected branches.

> The problem is reproducable with the following query.
> 
> SELECT array_position(ids, (1, 1))
> FROM (VALUES (ARRAY[(0, 0)]), (ARRAY[(1, 1)])) AS _(ids);

I used this as a new regression test.

Thanks for the report and patch!

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services