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

Поиск
Список
Период
Сортировка
Искать
От
Dave Chapeskie
Тема
Re: BUG #1723: array_cat() bug when passed empty array
Дата
Msg-id
20050722154104.GH18701@ddm.wox.org
Ответ на
Список
Дерево обсуждения
BUG #1723: array_cat() bug when passed empty array "Dave Chapeskie" <pgsql@ddm.wox.org>
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 Tom Lane <tgl@sss.pgh.pa.us>
Re: BUG #1723: array_cat() bug when passed empty array Dave Chapeskie <dchapeskie@sandvine.com>
Re: BUG #1723: array_cat() bug when passed empty array Tom Lane <tgl@sss.pgh.pa.us>
On Mon, Jun 20, 2005 at 03:44:24PM -0400, Tom Lane wrote:

> I [Tom Lane] 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 ...)

Anyone working on fixing this?  I'd have tried but I didn't want to dive
into exec_assign_value() and exec_cast_value().

Given that this occurs for almost any assignment of the form
"x := any expression with x" it's hard to avoid without rewritting a lot
of basic assignments with "tmp:=x; x:=foo(tmp)" which is ugly.

We can't use memory checking with this and even without memory checking
I don't trust that memory isn't getting spamed in some situations.
After all it's referencing free'd memory.

-- 
Dave Chapeskie
В списке pgsql-bugs по дате отправления
От: Andrew Smith
Дата:
От: Stephan Szabo
Дата:
FAQ