@@ -73,13 +73,16 @@ spi_response_t *__error_spi_resp(MemoryContext ctx, int ret, char *error)
7373spi_response_t * r ;
7474
7575r = MemoryContextAlloc (ctx ,sizeof (spi_response_t ));
76+ if (!r )return NULL ;
77+
7678r -> n_rows = 0 ;
7779r -> n_attrs = 0 ;
7880r -> retval = ret ;
7981r -> types = NULL ;
8082r -> rows = NULL ;
8183r -> ref = NULL ;
8284r -> error = _mcopy_string (ctx ,error );
85+ if (!(r -> error )return NULL ;
8386
8487return r ;
8588}
@@ -93,6 +96,7 @@ spi_response_t *__copy_spi_data(MemoryContext ctx, int ret, int n)
9396
9497
9598r = MemoryContextAlloc (ctx ,sizeof (spi_response_t ));
99+ if (!r )return NULL ;
96100r -> retval = ret ;
97101r -> error = NULL ;
98102
@@ -109,9 +113,11 @@ spi_response_t *__copy_spi_data(MemoryContext ctx, int ret, int n)
109113r -> n_rows = n ;
110114r -> n_attrs = SPI_tuptable -> tupdesc -> natts ;
111115r -> types = MemoryContextAlloc (ctx ,sizeof (Oid )* r -> n_attrs );
116+ if (!r -> types )return NULL ;
112117r -> rows = MemoryContextAlloc (ctx ,sizeof (spi_val_t * )* n );
118+ if (!r -> rows )return NULL ;
113119r -> ref = MemoryContextAlloc (ctx ,sizeof (bool )* r -> n_attrs );
114-
120+ if (! r -> ref ) return NULL ;
115121
116122for (i = 0 ;i < r -> n_attrs ;i ++ )
117123{
@@ -122,6 +128,7 @@ spi_response_t *__copy_spi_data(MemoryContext ctx, int ret, int n)
122128for (i = 0 ;i < n ;i ++ )
123129{
124130r -> rows [i ]= MemoryContextAlloc (ctx ,sizeof (spi_val_t )* r -> n_attrs );
131+ if (!(r -> rows [i ]))return NULL ;
125132for (j = 0 ;j < r -> n_attrs ;j ++ )
126133{
127134dat = SPI_getbinval (SPI_tuptable -> vals [i ],
@@ -152,6 +159,7 @@ char *_mcopy_string(MemoryContext ctx, char *str)
152159if (!ctx )ctx = SchedulerWorkerContext ;
153160
154161cpy = MemoryContextAlloc (ctx ,sizeof (char )* (len + 1 ));
162+ if (!cpy )return NULL ;
155163
156164memcpy (cpy ,str ,len );
157165cpy [len ]= 0 ;
@@ -165,6 +173,7 @@ char *my_copy_string(char *str)
165173char * cpy ;
166174
167175cpy = palloc (sizeof (char )* (len + 1 ));
176+ if (!cpy )return NULL ;
168177
169178memcpy (cpy ,str ,len );
170179cpy [len ]= 0 ;
@@ -497,6 +506,11 @@ spi_response_t *execute_spi_sql_with_args(MemoryContext ctx, const char *sql, in
497506ret = SPI_execute_with_args (sql ,n ,argtypes ,values ,nulls , false,0 );
498507MemoryContextSwitchTo (ctx );
499508rv = __copy_spi_data (ctx ,ret ,SPI_processed );
509+ if (!rv )
510+ {
511+ elog (LOG ,"ESSWA: Cannot allocate memory while copy resp data" );
512+ return NULL ;
513+ }
500514ReleaseCurrentSubTransaction ();
501515MemoryContextSwitchTo (ctx );
502516CurrentResourceOwner = oldowner ;
@@ -518,6 +532,11 @@ spi_response_t *execute_spi_sql_with_args(MemoryContext ctx, const char *sql, in
518532{
519533rv = __error_spi_resp (ctx ,ret ,"unknown error" );
520534}
535+ if (!rv )
536+ {
537+ elog (LOG ,"ESSWA: Cannot allocate memory while reporting error" );
538+ return NULL ;
539+ }
521540RollbackAndReleaseCurrentSubTransaction ();
522541CurrentResourceOwner = oldowner ;
523542MemoryContextSwitchTo (ctx );
@@ -550,6 +569,11 @@ spi_response_t *execute_spi_sql_with_args(MemoryContext ctx, const char *sql, in
550569sprintf (other ,"error number: %d" ,ret );
551570rv = __error_spi_resp (ctx ,ret ,other );
552571}
572+ if (!rv )
573+ {
574+ elog (LOG ,"ESSWA: Cannot allocate memory while reporting pg error" );
575+ return NULL ;
576+ }
553577}
554578
555579return rv ;
@@ -595,6 +619,11 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
595619SetCurrentStatementStartTimestamp ();
596620ret = SPI_execute_plan (plan ,values ,NULL , false,0 );
597621rv = __copy_spi_data (ctx ,ret ,SPI_processed );
622+ if (!rv )
623+ {
624+ elog (LOG ,"ESSWAP: Cannot allocate memory while copy data" );
625+ return NULL ;
626+ }
598627}
599628ReleaseCurrentSubTransaction ();
600629switch_to_worker_context ();
@@ -618,6 +647,11 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
618647{
619648rv = __error_spi_resp (ctx ,ret ,"unknown error" );
620649}
650+ if (!rv )
651+ {
652+ elog (LOG ,"ESSWAP: Cannot allocate memory while report error" );
653+ return NULL ;
654+ }
621655FreeErrorData (edata );
622656FlushErrorState ();
623657RollbackAndReleaseCurrentSubTransaction ();
@@ -653,6 +687,11 @@ spi_response_t *execute_spi_params_prepared(MemoryContext ctx, const char *sql,
653687sprintf (other ,"error number: %d" ,ret );
654688rv = __error_spi_resp (ctx ,ret ,other );
655689}
690+ if (!rv )
691+ {
692+ elog (LOG ,"ESSWAP: Cannot allocate memory while report pg error" );
693+ return NULL ;
694+ }
656695}
657696
658697return rv ;