Re: [sqlsmith] Crash in tsquery_rewrite/QTNBinary

From: Artur Zakirov <a(dot)zakirov(at)postgrespro(dot)ru>
To: Andreas Seltenreich <seltenreich(at)gmx(dot)de>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [sqlsmith] Crash in tsquery_rewrite/QTNBinary
Date: 2016-12-10 21:07:25
Message-ID: CAKNkYnyD=u+wVreeg+5shFa==PstJFboZY3rUBbynZE5y8WpzA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

2016-12-07 9:06 GMT+03:00 Andreas Seltenreich <seltenreich(at)gmx(dot)de>:
> Hi,
>
> the following query crashes master as of 4212cb7.
>
> select ts_rewrite(
> tsquery_phrase(
> tsquery $$'sanct' & 'peter'$$,
> tsquery $$'5' <-> '6'$$,
> 42),
> tsquery $$'5' <-> '6'$$,
> plainto_tsquery('I') );
>

This happens also for queries:

select ts_rewrite(
to_tsquery('5 & (6 | 5)'),
to_tsquery('5'),
to_tsquery('I'));

select ts_rewrite(
to_tsquery('5 & 6 <-> 5'),
to_tsquery('5'),
to_tsquery('I'));

It happens because 'I' is stop word and substitute query becomes
empty. And for queries above we need recursive dropvoidsubtree()
function. Without this patch this function cleans only first level of
tree. And query above becomes: '6 | void'.

Firstly I made recursive dropvoidsubtree(). But attached patch cleans
query tree in dofindsubquery() to avoid extra tree scan.

--
Artur Zakirov
Postgres Professional: http://www.postgrespro.com
Russian Postgres Company

Attachment Content-Type Size
0001-dofindsubquery-with-drop.diff text/plain 3.3 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Petr Jelinek 2016-12-10 22:10:19 snapbuild woes
Previous Message Christophe Pettus 2016-12-10 19:02:19 Re: [COMMITTERS] pgsql: Implement table partitioning.