Re: BUG #1723: array_cat() bug when passed empty array

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #1723: array_cat() bug when passed empty array
Дата
Msg-id 20233.1119296664@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: BUG #1723: array_cat() bug when passed empty array  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: BUG #1723: array_cat() bug when passed empty array  (Dave Chapeskie <dchapeskie@sandvine.com>)
Список pgsql-bugs
I wrote:
> Actually, I would say the bug is exec_assign_value's.  There is nothing
> at all wrong with a function returning one of its input values; for
> example the smaller/larger functions all do that.

For that matter, you don't need a function at all:

regression=# create or replace function copyit(text) returns text as $$
regression$# declare tmp text;
regression$# begin
regression$#   tmp := $1;
regression$#   tmp := tmp;
regression$#   return tmp;
regression$# end$$ language plpgsql stable;
CREATE FUNCTION
regression=# select copyit('foo');
ERROR:  out of memory
DETAIL:  Failed on request of size 1065320319.
CONTEXT:  PL/pgSQL function "copyit" line 4 at assignment
regression=#

This makes it perfectly clear that the problem is that exec_assign_value
must copy the given value before it frees the old, just in case they're
the same.  (Hmm, I wonder if we can shortcircuit the whole thing ...)

            regards, tom lane

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: BUG #1723: array_cat() bug when passed empty array
Следующее
От: "Magnus Hagander"
Дата:
Сообщение: Re: BUG #1721: mutiple bytes character string comaprison error