summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeodor Sigaev2007-11-16 17:09:15 +0000
committerTeodor Sigaev2007-11-16 17:09:15 +0000
commit9275f2d34c6430e039d99a6b42545604096691ff (patch)
tree0eca3f9bb4a39828f972d351627346979bbccb9d
parent011e0efc15712f5d1b8917acb92c4ab9b45e2535 (diff)
Backpatch: Fix tsvector_out() and tsquery_out() to escape backslesh, add test of that.
Patch by Bruce Momjian <bruce@momjian.us>
-rw-r--r--contrib/tsearch2/expected/tsearch2.out6
-rw-r--r--contrib/tsearch2/query.c2
-rw-r--r--contrib/tsearch2/sql/tsearch2.sql2
-rw-r--r--contrib/tsearch2/tsvector.c2
4 files changed, 10 insertions, 2 deletions
diff --git a/contrib/tsearch2/expected/tsearch2.out b/contrib/tsearch2/expected/tsearch2.out
index cb183918872..46498224c43 100644
--- a/contrib/tsearch2/expected/tsearch2.out
+++ b/contrib/tsearch2/expected/tsearch2.out
@@ -342,6 +342,12 @@ SELECT '''the wether'':dc & '' sKies '':BC & a:d b:a';
'the wether':dc & ' sKies ':BC & a:d b:a
(1 row)
+SELECT tsvector_in(tsvector_out($$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector)), tsquery_in(tsquery_out($$'\\as'$$::tsquery));
+ tsvector_in | tsquery_in
+----------------------------------------+------------
+ '\\as' 'abc' 'AB\\c' 'ab\\c' 'ab\\\\c' | '\\as'
+(1 row)
+
select lexize('simple', 'ASD56 hsdkf');
lexize
-----------------
diff --git a/contrib/tsearch2/query.c b/contrib/tsearch2/query.c
index 16f20b23b5d..29f43c6f067 100644
--- a/contrib/tsearch2/query.c
+++ b/contrib/tsearch2/query.c
@@ -723,7 +723,7 @@ infix(INFIX * in, bool first)
in->cur++;
while (*op)
{
- if (*op == '\'')
+ if (*op == '\'' || *op == '\\')
{
*(in->cur) = '\\';
in->cur++;
diff --git a/contrib/tsearch2/sql/tsearch2.sql b/contrib/tsearch2/sql/tsearch2.sql
index 52e709d74b7..563399e3666 100644
--- a/contrib/tsearch2/sql/tsearch2.sql
+++ b/contrib/tsearch2/sql/tsearch2.sql
@@ -65,6 +65,8 @@ SELECT '1&(2&(4&(5|!6)))'::tsquery;
SELECT E'1&(''2''&('' 4''&(\\|5 | ''6 \\'' !|&'')))'::tsquery;
SELECT '''the wether'':dc & '' sKies '':BC & a:d b:a';
+SELECT tsvector_in(tsvector_out($$'\\as' ab\c ab\\c AB\\\c ab\\\\c$$::tsvector)), tsquery_in(tsquery_out($$'\\as'$$::tsquery));
+
select lexize('simple', 'ASD56 hsdkf');
select lexize('en_stem', 'SKIES Problems identity');
diff --git a/contrib/tsearch2/tsvector.c b/contrib/tsearch2/tsvector.c
index e0fc67f2b18..c1d34bad277 100644
--- a/contrib/tsearch2/tsvector.c
+++ b/contrib/tsearch2/tsvector.c
@@ -520,7 +520,7 @@ tsvector_out(PG_FUNCTION_ARGS)
j = ptr->len;
while (j--)
{
- if (*curin == '\'')
+ if (*curin == '\'' || *curin == '\\')
{
int4 pos = curout - outbuf;