Prevent crash when ts_rewrite() replaces a non-top-level subtree with null.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 11 Dec 2016 18:09:57 +0000 (13:09 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 11 Dec 2016 18:09:57 +0000 (13:09 -0500)
commit0eaaaf00e296c2048b868b7c1d3c12c0eae6dd12
tree42663ed9b46178ceea18aab5d95ed9e3d5a7187d
parent9cda81f0056ca488dbd6cded64db1238aed816b2
Prevent crash when ts_rewrite() replaces a non-top-level subtree with null.

When ts_rewrite()'s replacement argument is an empty tsquery, it's supposed
to simplify any operator nodes whose operand(s) become NULL; but it failed
to do that reliably, because dropvoidsubtree() only examined the top level
of the result tree.  Rather than make a second recursive pass, let's just
give the responsibility to dofindsubquery() to simplify while it's doing
the main replacement pass.  Per report from Andreas Seltenreich.

Artur Zakirov, with some cosmetic changes by me.  Back-patch to all
supported branches.

Discussion: https://postgr.es/m/8737i01dew.fsf@credativ.de
src/backend/utils/adt/tsquery_rewrite.c
src/test/regress/expected/tsearch.out
src/test/regress/sql/tsearch.sql