diff options
author | Michael Meskes <meskes@postgresql.org> | 2015-06-15 14:21:03 +0200 |
---|---|---|
committer | Michael Meskes <meskes@postgresql.org> | 2015-06-15 14:22:54 +0200 |
commit | 4130b2c1fdbe71838baba00312b8ca599b62f98d (patch) | |
tree | 9117ddddc3159d612507335a340d2ffdb8e2eab1 /src/interfaces/ecpg/ecpglib/connect.c | |
parent | 3e2a17eecc4ceb76ac40978a15b26e120dbd52a6 (diff) |
Check for out of memory when allocating sqlca.
Patch by Michael Paquier
Diffstat (limited to 'src/interfaces/ecpg/ecpglib/connect.c')
-rw-r--r-- | src/interfaces/ecpg/ecpglib/connect.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/interfaces/ecpg/ecpglib/connect.c b/src/interfaces/ecpg/ecpglib/connect.c index e45d17fcc57..c90f13dc6c1 100644 --- a/src/interfaces/ecpg/ecpglib/connect.c +++ b/src/interfaces/ecpg/ecpglib/connect.c @@ -223,6 +223,12 @@ ECPGnoticeReceiver(void *arg, const PGresult *result) struct sqlca_t *sqlca = ECPGget_sqlca(); int sqlcode; + if (sqlca == NULL) + { + ecpg_log("out of memory"); + return; + } + (void) arg; /* keep the compiler quiet */ if (sqlstate == NULL) sqlstate = ECPG_SQLSTATE_ECPG_INTERNAL_ERROR; @@ -278,6 +284,14 @@ ECPGconnect(int lineno, int c, const char *name, const char *user, const char *p const char **conn_keywords; const char **conn_values; + if (sqlca == NULL) + { + ecpg_raise(lineno, ECPG_OUT_OF_MEMORY, + ECPG_SQLSTATE_ECPG_OUT_OF_MEMORY, NULL); + ecpg_free(dbname); + return false; + } + ecpg_init_sqlca(sqlca); /* @@ -657,6 +671,13 @@ ECPGdisconnect(int lineno, const char *connection_name) struct sqlca_t *sqlca = ECPGget_sqlca(); struct connection *con; + if (sqlca == NULL) + { + ecpg_raise(lineno, ECPG_OUT_OF_MEMORY, + ECPG_SQLSTATE_ECPG_OUT_OF_MEMORY, NULL); + return (false); + } + #ifdef ENABLE_THREAD_SAFETY pthread_mutex_lock(&connections_mutex); #endif |