Commit 25ee08e1 authored by Tom Lane's avatar Tom Lane

If spi.c wants to use malloc, it better test for malloc failure.

parent 7748e9e7
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* spi.c * spi.c
* Server Programming Interface * Server Programming Interface
* *
* $Id: spi.c,v 1.54 2001/05/21 14:22:17 wieck Exp $ * $Header: /cvsroot/pgsql/src/backend/executor/spi.c,v 1.55 2001/06/01 19:43:55 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -48,8 +48,9 @@ extern void ShowUsage(void); ...@@ -48,8 +48,9 @@ extern void ShowUsage(void);
/* =================== interface functions =================== */ /* =================== interface functions =================== */
int int
SPI_connect() SPI_connect(void)
{ {
_SPI_connection *new_SPI_stack;
/* /*
* When procedure called by Executor _SPI_curid expected to be equal * When procedure called by Executor _SPI_curid expected to be equal
...@@ -62,19 +63,23 @@ SPI_connect() ...@@ -62,19 +63,23 @@ SPI_connect()
{ {
if (_SPI_connected != -1) if (_SPI_connected != -1)
elog(FATAL, "SPI_connect: no connection(s) expected"); elog(FATAL, "SPI_connect: no connection(s) expected");
_SPI_stack = (_SPI_connection *) malloc(sizeof(_SPI_connection)); new_SPI_stack = (_SPI_connection *) malloc(sizeof(_SPI_connection));
} }
else else
{ {
if (_SPI_connected <= -1) if (_SPI_connected <= -1)
elog(FATAL, "SPI_connect: some connection(s) expected"); elog(FATAL, "SPI_connect: some connection(s) expected");
_SPI_stack = (_SPI_connection *) realloc(_SPI_stack, new_SPI_stack = (_SPI_connection *) realloc(_SPI_stack,
(_SPI_connected + 2) * sizeof(_SPI_connection)); (_SPI_connected + 2) * sizeof(_SPI_connection));
} }
if (new_SPI_stack == NULL)
elog(ERROR, "Memory exhausted in SPI_connect");
/* /*
* We' returning to procedure where _SPI_curid == _SPI_connected - 1 * We' returning to procedure where _SPI_curid == _SPI_connected - 1
*/ */
_SPI_stack = new_SPI_stack;
_SPI_connected++; _SPI_connected++;
_SPI_current = &(_SPI_stack[_SPI_connected]); _SPI_current = &(_SPI_stack[_SPI_connected]);
...@@ -104,7 +109,7 @@ SPI_connect() ...@@ -104,7 +109,7 @@ SPI_connect()
} }
int int
SPI_finish() SPI_finish(void)
{ {
int res; int res;
...@@ -136,8 +141,14 @@ SPI_finish() ...@@ -136,8 +141,14 @@ SPI_finish()
} }
else else
{ {
_SPI_stack = (_SPI_connection *) realloc(_SPI_stack, _SPI_connection *new_SPI_stack;
new_SPI_stack = (_SPI_connection *) realloc(_SPI_stack,
(_SPI_connected + 1) * sizeof(_SPI_connection)); (_SPI_connected + 1) * sizeof(_SPI_connection));
/* This could only fail with a pretty stupid malloc package ... */
if (new_SPI_stack == NULL)
elog(ERROR, "Memory exhausted in SPI_finish");
_SPI_stack = new_SPI_stack;
_SPI_current = &(_SPI_stack[_SPI_connected]); _SPI_current = &(_SPI_stack[_SPI_connected]);
} }
...@@ -151,7 +162,6 @@ SPI_finish() ...@@ -151,7 +162,6 @@ SPI_finish()
void void
AtEOXact_SPI(void) AtEOXact_SPI(void)
{ {
/* /*
* Note that memory contexts belonging to SPI stack entries will be * Note that memory contexts belonging to SPI stack entries will be
* freed automatically, so we can ignore them here. We just need to * freed automatically, so we can ignore them here. We just need to
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment