Re: strpos behavior change around empty substring in PG12

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: strpos behavior change around empty substring in PG12
Дата
Msg-id 28058.1572278241@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: strpos behavior change around empty substring in PG12  (Robert Haas <robertmhaas@gmail.com>)
Ответы Re: strpos behavior change around empty substring in PG12
Re: strpos behavior change around empty substring in PG12
Список pgsql-hackers
Robert Haas <robertmhaas@gmail.com> writes:
> On Mon, Oct 28, 2019 at 11:02 AM Shay Rojansky <roji@roji.org> wrote:
>> Before PG12, select strpos('test', '') returns 1 (empty substring found at first position of the string), whereas
startingwith PG12 it returns 0 (empty substring not found). 

> It looks to me like this got broken here:

> commit 9556aa01c69a26ca726d8dda8e395acc7c1e30fc
> Author: Heikki Linnakangas <heikki.linnakangas@iki.fi>
> Date:   Fri Jan 25 16:25:05 2019 +0200
>     Use single-byte Boyer-Moore-Horspool search even with multibyte encodings.

> Not sure what happened exactly.

I think the problem is lack of clarity about the edge cases.
The patch added this short-circuit right at the top of text_position():

+   if (VARSIZE_ANY_EXHDR(t1) < 1 || VARSIZE_ANY_EXHDR(t2) < 1)
+       return 0;

and as this example shows, that's the Wrong Thing.  Fortunately,
it also seems easily fixed.

            regards, tom lane



В списке pgsql-hackers по дате отправления:

Предыдущее
От: "postgresql_2016@163.com"
Дата:
Сообщение: Re: TOAST corruption in standby database
Следующее
От: Robert Haas
Дата:
Сообщение: Re: [Proposal] Global temporary tables