Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit19d2901

Browse files
committed
Fix nested NOT operation cleanup in tsquery.
During normalization of tsquery tree it tries to simplify nested NOToperations but there it's obvioulsy missed that subsequent node could bea leaf node (value node)Bug #14245: Segfault on weird to_tsqueryReported by David Kellum.
1 parentce150e7 commit19d2901

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

‎src/backend/utils/adt/tsquery_cleanup.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,14 +406,20 @@ normalize_phrase_tree(NODE *node)
406406

407407
if (node->valnode->qoperator.oper==OP_NOT)
408408
{
409+
NODE*orignode=node;
410+
409411
/* eliminate NOT sequence */
410412
while (node->valnode->type==QI_OPR&&
411413
node->valnode->qoperator.oper==node->right->valnode->qoperator.oper)
412414
{
413415
node=node->right->right;
414416
}
415417

416-
node->right=normalize_phrase_tree(node->right);
418+
if (orignode!=node)
419+
/* current node isn't checked yet */
420+
node=normalize_phrase_tree(node);
421+
else
422+
node->right=normalize_phrase_tree(node->right);
417423
}
418424
elseif (node->valnode->qoperator.oper==OP_PHRASE)
419425
{

‎src/test/regress/expected/tsearch.out

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,6 +555,18 @@ SELECT plainto_tsquery('english', 'foo bar') && 'asd | fg';
555555
(1 row)
556556

557557
-- Check stop word deletion, a and s are stop-words
558+
SELECT to_tsquery('english', '!(a & !b) & c');
559+
to_tsquery
560+
------------
561+
'b' & 'c'
562+
(1 row)
563+
564+
SELECT to_tsquery('english', '!(a & !b)');
565+
to_tsquery
566+
------------
567+
'b'
568+
(1 row)
569+
558570
SELECT to_tsquery('english', '(1 <-> 2) <-> a');
559571
to_tsquery
560572
-------------

‎src/test/regress/sql/tsearch.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ SELECT plainto_tsquery('english', 'foo bar') || !!plainto_tsquery('english', 'as
130130
SELECT plainto_tsquery('english','foo bar') &&'asd | fg';
131131

132132
-- Check stop word deletion, a and s are stop-words
133+
SELECT to_tsquery('english','!(a & !b) & c');
134+
SELECT to_tsquery('english','!(a & !b)');
135+
133136
SELECT to_tsquery('english','(1 <-> 2) <-> a');
134137
SELECT to_tsquery('english','(1 <-> a) <-> 2');
135138
SELECT to_tsquery('english','(a <-> 1) <-> 2');

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp