Re: bug of pg_trgm? - Mailing list pgsql-hackers

From Fujii Masao
Subject Re: bug of pg_trgm?
Date
Msg-id CAHGQGwF2oqOOaFikCY2EzJvkRjZrTjLrKiqTUC+zn6THGQgu1w@mail.gmail.com
Whole thread Raw
In response to Re: bug of pg_trgm?  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: bug of pg_trgm?
List pgsql-hackers
On Thu, Aug 9, 2012 at 3:05 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> ... btw, I think there is another problem here, which is that
> generate_wildcard_trgm will restart get_wildcard_part at the
> same place that the second loop exits, which means it would
> do the wrong thing if what it returns is a pointer to the
> second char of an escape pair.  Consider for instance
>
>         foo\\%bar
>
> The first call of get_wildcard_part will correctly extract "foo",
> but then return a pointer to the second backslash.  So the second
> call will think that the % is escaped, which it is not, leading to
> a wrong decision about whether to pad "bar".

Good catch!

> Probably a minimal fix for this could be made by backing up "endword"
> one byte before returning it if in_escape is true when the second
> loop exits.  That would not scale up to preserving the state of
> in_wildcard_meta, but since the second loop never advances past a
> meta char, that's okay for the moment.

Or what about extending get_wildcard_part() so that it accepts the pointer
to in_escape as an argument? generate_wildcard_trgm() can know the last
value of in_escape and specify it the next call of get_wildcard_part(). Looks
very simple.

Regards,

-- 
Fujii Masao



pgsql-hackers by date:

Previous
From: Greg Stark
Date:
Subject: Re: WIP patch for consolidating misplaced-aggregate checks
Next
From: Fujii Masao
Date:
Subject: Re: Prevent restored WAL files from being archived again Re: Unnecessary WAL archiving after failover