aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/odbc/statement.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/odbc/statement.c')
-rw-r--r--src/interfaces/odbc/statement.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/interfaces/odbc/statement.c b/src/interfaces/odbc/statement.c
index ba6ca3efbd4..fd77eee6d6c 100644
--- a/src/interfaces/odbc/statement.c
+++ b/src/interfaces/odbc/statement.c
@@ -248,6 +248,7 @@ SC_Constructor(void)
rv->errormsg = NULL;
rv->errornumber = 0;
rv->errormsg_created = FALSE;
+ rv->errormsg_malloced = FALSE;
rv->statement = NULL;
rv->stmt_with_params = NULL;
@@ -530,9 +531,12 @@ SC_recycle_statement(StatementClass *self)
self->bind_row = 0;
self->last_fetch_count = 0;
+ if (self->errormsg_malloced && self->errormsg)
+ free(self->errormsg);
self->errormsg = NULL;
self->errornumber = 0;
self->errormsg_created = FALSE;
+ self->errormsg_malloced = FALSE;
self->lobj_fd = -1;
@@ -610,9 +614,12 @@ SC_unbind_cols(StatementClass *self)
void
SC_clear_error(StatementClass *self)
{
+ if (self->errormsg_malloced && self->errormsg)
+ free(self->errormsg);
self->errornumber = 0;
self->errormsg = NULL;
self->errormsg_created = FALSE;
+ self->errormsg_malloced = FALSE;
}
@@ -675,7 +682,8 @@ SC_get_error(StatementClass *self, int *number, char **message)
{
*number = self->errornumber;
*message = self->errormsg;
- self->errormsg = NULL;
+ if (!self->errormsg_malloced)
+ self->errormsg = NULL;
}
rv = (self->errornumber != 0);