diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2007-11-16 17:31:16 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2007-11-16 17:31:16 +0000 |
commit | 505292eb41cf82cac449d15dd592d109e25d3c8f (patch) | |
tree | 99e7727ba52c95c02a7b260da0b25b600c1f153f | |
parent | 8145f00f27b8159908b3b8e984729adb2cf26cd0 (diff) | |
download | postgresql-505292eb41cf82cac449d15dd592d109e25d3c8f.tar.gz postgresql-505292eb41cf82cac449d15dd592d109e25d3c8f.zip |
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.out | 12 | ||||
-rw-r--r-- | contrib/tsearch2/query.c | 2 | ||||
-rw-r--r-- | contrib/tsearch2/sql/tsearch2.sql | 3 | ||||
-rw-r--r-- | contrib/tsearch2/tsvector.c | 2 |
4 files changed, 17 insertions, 2 deletions
diff --git a/contrib/tsearch2/expected/tsearch2.out b/contrib/tsearch2/expected/tsearch2.out index 88bc58e1154..c73a3b8f850 100644 --- a/contrib/tsearch2/expected/tsearch2.out +++ b/contrib/tsearch2/expected/tsearch2.out @@ -342,6 +342,18 @@ 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 '\'\\\\as\' ab\\c ab\\\\c AB\\\\\c ab\\\\\\\\c'::tsvector, '\'\\\\as\''::tsquery; + tsvector | tsquery +----------------------------------------+--------- + '\\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 9c4ed370a6b..95bce54fc4f 100644 --- a/contrib/tsearch2/query.c +++ b/contrib/tsearch2/query.c @@ -680,7 +680,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 4dd16f01a7d..3e7210d5bb7 100644 --- a/contrib/tsearch2/sql/tsearch2.sql +++ b/contrib/tsearch2/sql/tsearch2.sql @@ -65,6 +65,9 @@ SELECT '1&(2&(4&(5|!6)))'::tsquery; SELECT '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 '\'\\\\as\' ab\\c ab\\\\c AB\\\\\c ab\\\\\\\\c'::tsvector, '\'\\\\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 d823231067a..07f64ba4137 100644 --- a/contrib/tsearch2/tsvector.c +++ b/contrib/tsearch2/tsvector.c @@ -519,7 +519,7 @@ tsvector_out(PG_FUNCTION_ARGS) j = ptr->len; while (j--) { - if (*curin == '\'') + if (*curin == '\'' || *curin == '\\') { int4 pos = curout - outbuf; |