Backpatch: Fix tsvector_out() and tsquery_out() to escape backslesh, add test of that.

Patch by Bruce Momjian <bruce@momjian.us>
This commit is contained in:
Teodor Sigaev 2007-11-16 17:03:15 +00:00
parent bf519d64f4
commit 7b85567962
4 changed files with 21 additions and 0 deletions

View File

@ -331,6 +331,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 'a' < 'b & c'::tsquery;
?column?
----------

View File

@ -765,6 +765,11 @@ infix(INFIX * in, bool first)
*(in->cur) = '\'';
in->cur++;
}
else if (t_iseq(op, '\\'))
{
*(in->cur) = '\\';
in->cur++;
}
COPYCHAR(in->cur, op);
clen = pg_mblen(op);

View File

@ -67,6 +67,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 'a' < 'b & c'::tsquery;
select 'a' > 'b & c'::tsquery;
select 'a | f' < 'b & c'::tsquery;

View File

@ -550,6 +550,14 @@ tsvector_out(PG_FUNCTION_ARGS)
curout = outbuf + pos;
*curout++ = '\'';
}
else if (t_iseq(curin, '\\'))
{
int4 pos = curout - outbuf;
outbuf = (char *) repalloc((void *) outbuf, ++lenbuf);
curout = outbuf + pos;
*curout++ = '\\';
}
while (len--)
*curout++ = *curin++;
}