BUG #2817: Mixing spi_prepare and spi_exec_query causes postgresql to terminate itself on bad argument types

Поиск
Список
Период
Сортировка
От Michael Andreen
Тема BUG #2817: Mixing spi_prepare and spi_exec_query causes postgresql to terminate itself on bad argument types
Дата
Msg-id 200612071620.kB7GKjdp094250@wwwmaster.postgresql.org
обсуждение исходный текст
Ответы Re: BUG #2817: Mixing spi_prepare and spi_exec_query causes postgresql to terminate itself on bad argument types  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
The following bug has been logged online:

Bug reference:      2817
Logged by:          Michael Andreen
Email address:      harv@ruin.nu
PostgreSQL version: 8.2
Operating system:   Gentoo Linux (unofficial postgresql 8.2 package)
Description:        Mixing spi_prepare and spi_exec_query causes postgresql
to terminate itself on bad argument types
Details:

Was playing around with the new release and changing some pl/perl
functions to use the new spi_prepare and friends when I noticed
postgresql terminating strangely, with no useful warnings at all, the
log contained the following:

Dec  7 16:58:28 [postgres] [7-1] LOG:  database system is ready
Dec  7 16:58:46 [postgres] [2-1] LOG:  could not receive data from
client: Connection reset by peer
Dec  7 16:58:56 [postgres] [2-1] LOG:  server process (PID 26649) was
terminated by signal 11
Dec  7 16:58:56 [postgres] [3-1] LOG:  terminating any other active
server processes
Dec  7 16:58:56 [postgres] [4-1] LOG:  all server processes terminated;
reinitializing
Dec  7 16:58:56 [postgres] [5-1] LOG:  database system was interrupted
at 2006-12-07 16:58:28 CET


After some playing around I tracked it down to a spi_prepare line where
I had specified 'integer' as type instead of 'int4'.

Tried to create a simple function to reproduce the bug:
CREATE OR REPLACE FUNCTION nocrash()
  RETURNS int4 AS
$BODY$$query = spi_prepare('SELECT 1 WHERE 1 = $1','integer');
return 1;$BODY$
  LANGUAGE 'plperl' VOLATILE;

But this gave a nice error message:
ERROR:  error from Perl function: type "integer" does not exist at line
1.

After some more work I realized that I still had a few spi_exec_query
calls in the script and adding one to my test case caused postgresql to
terminate just like before.

CREATE OR REPLACE FUNCTION crash()
  RETURNS int4 AS
$BODY$$rv = spi_exec_query("SELECT 1");
$query = spi_prepare('SELECT 1 WHERE 1 = $1','integer');
return 1;$BODY$
  LANGUAGE 'plperl' VOLATILE;

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: BUG #2807: constraint violation
Следующее
От: "Markus Grabner"
Дата:
Сообщение: BUG #2813: missing RPM build dependency: tcl-devel