]> granicus.if.org Git - postgresql/commitdiff
If spi.c wants to use malloc, it better test for malloc failure.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 1 Jun 2001 19:43:55 +0000 (19:43 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 1 Jun 2001 19:43:55 +0000 (19:43 +0000)
src/backend/executor/spi.c

index d369827742741ca072c6040ca2297339882a0484..b5fef1dd49ce1065b5d74df55352225f8a7ca992 100644 (file)
@@ -3,7 +3,7 @@
  * spi.c
  *                             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);
 /* =================== interface functions =================== */
 
 int
-SPI_connect()
+SPI_connect(void)
 {
+       _SPI_connection *new_SPI_stack;
 
        /*
         * When procedure called by Executor _SPI_curid expected to be equal
@@ -62,19 +63,23 @@ SPI_connect()
        {
                if (_SPI_connected != -1)
                        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
        {
                if (_SPI_connected <= -1)
                        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));
        }
 
+       if (new_SPI_stack == NULL)
+               elog(ERROR, "Memory exhausted in SPI_connect");
+
        /*
         * We' returning to procedure where _SPI_curid == _SPI_connected - 1
         */
+       _SPI_stack = new_SPI_stack;
        _SPI_connected++;
 
        _SPI_current = &(_SPI_stack[_SPI_connected]);
@@ -104,7 +109,7 @@ SPI_connect()
 }
 
 int
-SPI_finish()
+SPI_finish(void)
 {
        int                     res;
 
@@ -136,8 +141,14 @@ SPI_finish()
        }
        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));
+               /* 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]);
        }
 
@@ -151,7 +162,6 @@ SPI_finish()
 void
 AtEOXact_SPI(void)
 {
-
        /*
         * Note that memory contexts belonging to SPI stack entries will be
         * freed automatically, so we can ignore them here.  We just need to